別に開いたモーダルフォームから戻り値を取得したいといったことがよくあるのですが、そのような場合はフォームのプロパティを使うことが出来ます。
例
まず、フォーム1にこのようにテキストボックス(textMessage)と開くボタン(buttonOpen)を配置します。
次にフォーム2にコンボボックス(comboFruits)とOKボタン(buttonOK)を配置します。
ちなみに今回コンボボックスにこのように値リストを入れています。
そして、それぞれのフォームに次のように記述します。
フォーム1
'メンバ変数 Private mRetnValue As String 'プロパティ Public Property Let RetnValue(ByVal Value As String) mRetnValue = Value End Property Public Property Get c() As String RetnValue = mRetnValue End Property
Private Sub buttonOpen_Click() mRetnValue = "" DoCmd.OpenForm "フォーム2", acNormal, , , , acDialog 'フォーム2で選択した値をテキストボックスに表示 Me.textMessage.Value = mRetnValue End Sub
フォーム2
Private Sub buttonOK_Click() Form_フォーム1.RetnValue = Me.comboFruits.Value DoCmd.Close acForm, Me.Name End Sub
では実行してみます。
フォーム1を起動したら、「開く」ボタンをクリックします。
フォーム2が開いたら、コンボボックスから値を選択し、OKボタンをクリックします。
すると、フォーム1のテキストボックスにフォーム2で選択した値が表示されました。
解説
フォーム2からの戻り値を取得するのにプロパティを使用しています。このプロパティを用いる方法はよくやるやり方で、設定値やキャンセルフラグを受け取ったりします。また、フォーム2をモーダル(第6引数にacDialogを指定するとモーダルでフォームが開く)で開くと、その開いたフォームが閉じられない限り処理がストップしていますので、OpenFormのあとに戻り値をテキストボックスに表示する処理を行っています。スポンサーリンク