【Access】別に開いたモーダルフォームから戻り値を取得する方法


別に開いたモーダルフォームから戻り値を取得したいといったことがよくあるのですが、そのような場合はフォームのプロパティを使うことが出来ます。


まず、フォーム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のあとに戻り値をテキストボックスに表示する処理を行っています。









comments powered by Disqus