UserFormを変数で操作する


NIFTYの過去ログを眺めていたら、すっかり忘れていたネタが書かれていました。

「UserFormの名前を変数に入れて操作するにはどうしたらいいか」というネタです。

たとえば、"UserForm1"という名前のUserFormがあったとします。このUserFormを表示するには次のようにします。

Sub Sample1()
    UserForm1.Show
End Sub

このとき「UserForm1.Show」の「UserForm1」は文字列ではなくオブジェクトの名前ですから、次のようにするとエラーになります。

Sub Sample2()
    Dim myForm As String
    myForm = "UserForm1"
    myForm.Show
End Sub

変数にUserFormの名前を格納し、その変数を利用してUserFormを開くには次のようにします。

Sub Sample3()
    Dim myForm As String
    myForm = "UserForm1"
    UserForms.Add(myForm).Show
End Sub

一見すると裏技のようですが、ちゃんとMicrosoftの技術情報で公開されています。

[XL97]変数を使用してユーザーフォームを表示する方法

1997年とは古いですね(^^;

UserForm自体をオブジェクト変数に格納すると、同じUserFormを複数表示することも可能です。

UserForm1にCommandButtonを1つ配置して、次のようなマクロを作成してください。

Private Sub CommandButton1_Click()
    Dim myForm As UserForm1
    Set myForm = UserForms.Add("UserForm1")
    myForm.Show
End Sub

CommandButtonをクリックするたびに、自分自身(UserForm1)を開きます。