はじめに
1つ目のユーザーフォームを開き、そのボタンで2つ目のユーザーフォームを開いて、そこでセットした値を1つ目に送るというプログラムを考えてみましょう。

上記のようなケースでは、Userform1の「開く」ボタンクリックで、UserForm2を開きます。
'Userform1のモジュールに記述
Private Sub CommandButton1_Click()
UserForm2.Show
End Sub
UserForm2のボタンクリックに以下のように書けば、Userform1のテキストボックスに直接値を入力する事が可能です。
'UserForm2のモジュールに記述
Private Sub CommandButton1_Click()
UserForm1.TextBox1.Value = Me.TextBox1.Value
Unload Me
End Sub
ただこれでは、Userform1内で値を加工したい場合困る場合はあります。
Userform1でグローバル変数を持つ
Userform1にグローバル変数を持って、ここに値を保持すれば、Userform1を開いている間値を使う事ができます。テキストボックスが必要ないのでプログラム内部で値を使いたい場合に有効です。
'Userform1に記述
Public myValue As Variant 'グローバル変数
Private Sub CommandButton1_Click()
UserForm2.Show
Me.TextBox1.Value = myValue 'Userform2が閉じるとmyValueに値が入っている
End Sub
'Userform2に記述
Private Sub CommandButton1_Click()
UserForm1.myValue = Me.TextBox1.Value
Unload Me
End Sub
ブック全体のグローバル変数を持つ
標準モジュールにグローバル変数を持ってこれを利用する方法も考えられます。同じようにどこかのセルに値を保持して受け渡しを行う方法も考えられます。
ただ、ユーザーフォーム間の値の受け渡しでここまでするのは少々大袈裟な感じもします。
やはり1つ目のユーザーフォームにグローバル変数を設けるのが標準的な考え方かもしれません。
コメント