複数のUserFormでデータを受け渡す


UserFormで入力(または選択)された情報を、別のUserFormに反映させる方法です。これには、2つのやり方があります。なお、ここでは、UserForm1のTextBoxに入力された文字列を、UserForm2のLabelに表示するという動作を例にします。

【UserForm1】

【UserForm2】

直接別のコントロールに設定する

難しく考えることはありません。UserForm1のコードから、UserForm2のコントロールを直接操作してやればいいんです。

【UserForm1】のコード

Private Sub CommandButton1_Click()
    ''[UserForm2を開く]ボタン
    UserForm2.Label1.Caption = Me.TextBox1.Text
    UserForm2.Show
End Sub

【UserForm2】のコード

Private Sub CommandButton1_Click()
    ''[このUserFormを閉じる]ボタン
    Unload Me
End Sub

UserForm1から「UserForm2.Label1.Caption = Me.TextBox1.Text」とUserForm2のコントロールを操作すると、そのときUserForm2が自動的にLoadされますので、UserForm2の「UserForm_Initialize」も自動的に実行されます。

広域変数を使う

UserForm1とUserForm2の両方で使える共通の変数を用意します。こうした広域変数は、標準モジュールで宣言します。

【UserForm1】のコード

Private Sub CommandButton1_Click()
    ''[UserForm2を開く]ボタン
    buf = Me.TextBox1.Text
    UserForm2.Show
End Sub

【UserForm2】のコード

Private Sub CommandButton1_Click()
    ''[このUserFormを閉じる]ボタン
    Unload Me
End Sub
Private Sub UserForm_Initialize()
    Label1.Caption = buf
End Sub

広域変数の代わりにセルを使う手もありますね。そしたら、そのために標準モジュールを追加したり、変数を宣言する必要もありません。まあ、そのように使えるワークシートが空いていればの話ですけど。