機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA

複数の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



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






このエントリーをはてなブックマークに追加