それほど時間はかかりませんでした
比較を抽象化して一般的なものにしたい場合は、これで正しいロジックが得られるはずです。
Public Sub CompareType(val as Control, typ as String)
...
if TypeName(val) = typ then
...
end if
...
End Sub
基本的にオブジェクト(val)を渡します。抽象化を一歩進めたい場合はバリアントにすることができ、そのタイプに対して返される文字列値がわかっている場合は、それを文字列値として渡します。
実例:
コード実行の場合:
...
AutoSizeControl CurrentDb, frm, "Textbox"
...
モジュール宣言:
Public Sub AutoSizeControl(ByRef db As Database, ByRef frm As Form, typ As String)
Dim ctl As Control, i As Integer
For i = 0 To (frm.Controls.Count - 1)
Set ctl = frm.Controls(i)
If TypeName(ctrl) = typ Then
ctl.ColumnWidth = -2
End If
Next
End Sub
これがそのような抽象化を必要とするかもしれない他の誰かに役立つことを願っています。