【VBA】ユーザーフォームを標準モジュールから呼び出す方法(Show)
今回はユーザーフォームを標準モジュールから呼び出す方法を紹介します。
ユーザーフォームを標準モジュールから呼び出す方法
'標準モジュール側
Sub ShowUserForm()
'ユーザーフォーム名.Show
UserForm1.Show
End Sub
ユーザーフォームを標準モジュールから呼び出すにはShowメソッドを使います。
ユーザーフォーム名が「UserForm1」ならばUserForm1.Showとすれば表示されます。
ユーザーフォーム名に応じて **.Showとしましょう。
シート上のボタンからユーザーフォームを表示させる
シート上のボタンからユーザーフォームを表示させるためには、標準モジュールに作成したプロシージャを利用すればOKです。
シート上に標準モジュールのプロシージャ(先ほどのサンプルコードだとShowUserForm)を呼び出すボタンを設置します。
これで、ボタンを押せばShowUserFormが実行されて、ShowUserFormがユーザーフォームが表示されます。
ユーザーフォームに引数を渡す方法
他の言語だと、ユーザーフォームなどを作成するときに同時に引数を渡すことができます。
しかし、VBAにはこのような仕様がありません。
そのため、引数の代わりにモジュールレベル変数を使って対処します。
'ユーザーフォーム側
Public abc as String'モジュールレベル変数
まず、↑のようにユーザーフォーム側にモジュールレベル変数を定義します。
モジュールレベル変数が分からない方ははVBAでグローバル変数を定義する方法(モジュールレベル変数)をご覧ください。
'標準モジュール側
Sub ShowUserForm()
'一旦、ユーザーフォームのインスタンス変数を作成する
Dim uf As UserForm1
Set uf = New UserForm1
'モジュールレベル変数に値を代入
uf.abc = "渡したい値"
'インスタンス変数.Show
uf.Show
End Sub
標準モジュール側には↑のように記載します。
先ほどは「ユーザーフォーム名.Show」でいきなりユーザーフォームを表示したのですが、今回は一旦ユーザーフォームのインスタンス変数を作成しています。
そして、インスタンス変数.変数名=~として、モジュールレベル変数に値を代入します。
こうすることにより、標準モジュールの値をユーザーフォームにて利用することができます。
ユーザーフォームの表示中に他の操作を許可する方法
'標準モジュール側
Sub ShowUserForm()
'他の操作を許可
UserForm1.Show vbModeless
End Sub
ユーザーフォームの表示中に他の操作を許可するには、Showメソッドの後にvbModelessを書きます。
これを書くとユーザーフォームの表示中に、セルを選択したりすることができます。
ユーザーフォームを開きながら他の処理もする場合は、vbModelessを追加しましょう。