ユーザーフォーム上に設置されているコントロールをすべて取得する方法についてご説明します。
コントロールの数が多い場合や、同じ種類のコントロールをまとめて操作したい場合に、一つ一つコントロールを指定して操作していては大変ですので、まとめて取得する方法知っておくと非常に便利です。
コントロールの名前、種類、設置されているコントロールの数など取得するサンプルコードも記載します。
その他のユーザーフォームの作成や操作方法について下記記事をご覧ください。
- ユーザーフォームの作り方と表示方法
- ユーザーフォームのプロパティ一覧と表示方法
- ユーザーフォームのサイズを変更する
- ユーザーフォームの背景色を変更する
- ユーザーフォームにコントロールを追加する方法
- ユーザーフォームを閉じる方法
- ユーザーフォームを×ボタンで閉じれないようにする方法
1.コントロールの取得方法
コントロールを取得するには「Controls」コレクションを使用します。
指定したユーザーフォーム上のコントロールをすべて取得するには「For Each In Next」でループして取得します。
もちろんコントロールの数を取得する事で「For Next」のループでも可能です。
コントロールの数を取得する
コントロールの数を取得するには「Count」プロパティで取得します。
次のように記述します。
Controls.Count
コントロールの名前を取得する
コントロールの名前を取得するには「Name」プロパティで取得が可能です。
次のように記述します。
Control.Name
コントロールの種類を取得する
コントロールの種類を取得するには「TypeName」関数を使用します。
次のように記述します。
TypeName(Control)
2.サンプルコード
ユーザーフォーム上のコントロールをすべて取得するサンプルコードです。
今回はラベル5個、テキストボックス5個、コンボボックス1個、リストボックス1個、コマンドボタン2個の以下のようなユーザーフォームを用意しました。
名前を取得するサンプルコード
Sub Sample1()
Dim MyCtrl As Object
Dim MyStr As String
With UserForm1
For Each MyCtrl In .Controls 'ユーザーフォーム上のコントロールをループ
MyStr = MyStr & MyCtrl.Name & vbCrLf 'コントロールの名前を変数に格納
Next
MsgBox MyStr
End With
End Sub
種類を取得するサンプルコード
Sub Sample2()
Dim MyCtrl As Object
Dim MyStr As String
With UserForm1
For Each MyCtrl In .Controls 'ユーザーフォーム上のコントロールをループ
MyStr = MyStr & TypeName(MyCtrl) & vbCrLf 'コントロールの種類を変数に格納
Next
MsgBox MyStr
End With
End Sub
For Nextでループして取得する方法
For Nextでループする場合は、コントロールの数を取得してループする必要があります。
コントロール数は「Controls.Count」で取得します。
Sub Sample3()
Dim MyCtrl As Object
Dim MyStr As String
Dim i As Long
With UserForm1
For i = 0 To .Controls.Count - 1 'ユーザーフォーム上のコントロール数分をループ
'コントロールの「名前/種類」を変数に格納
MyStr = MyStr & .Controls(i).Name & " / " & TypeName(.Controls(i)) & vbCrLf
Next i
MsgBox MyStr
End With
End Sub