コントロールを変数にしてForループ Excel VBA

LONERさん
LONERさん

コントロール引数にしたプロシージャを作るにはどうすればいいのか、
コントロールForループに入れてやるにはどうすればいいのか。

今回は、フォームをダブルクリックしたらコントロールの .Enabled が変化するようにしたかったのでございます。

で、どうしたかというと、


VBA の場合、
 Me.Controls("コントロール名")
でコントロールが返ってきます。

そこで、テキストボックスの名前を
 txtTitle1
 txtTitle2, ...
という具合にしておいて、

 For i = 0 to N

のループの中に

 Me.Controls("txtTitle" & CStr(i))

を入れました。

ついでに、
 Dim cobj As TextBox
 Set cobj = Me.Controls("XXXXXX")

ということもやってみたのですが、
これだとエラーが出ます。

 Dim cobj As Object

とするとうまくいきます。

Option Explicit

Private Const N As Integer = 8 '制御する TextBox の総数

'フォームがダブルクリックされたら、テキストボックスを編集不可にします。
Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim i As Integer
Dim cobj As Object

If txtTitle1.Enabled = False Then
For i = 1 To N
Set cobj = Me.Controls("txtTitle" & CStr(i))
cobj.Enabled = True
Next i
Else
For i = 1 To N
Set cobj = Me.Controls("txtTitle" & CStr(i))
cobj.Enabled = False
Next i
End If
End Sub

コメントがつかないブログなので、役に立っているのかいないのかがわからない毎日ですw


これは、Excel VBA での話しなので、VB.NET でどうなるかはわかりません。もっと簡単な方法があるらしいが・・・。
Excel でできるってことは、Access などでもできると思う。

LONERさんのブログ一覧