2020.1.31

モーダルフォームから呼び出し元のフォームへ戻り値を渡す方法(プロパティ、プロシージャ、一時変数)

Accessであるフォームから別のフォームをモーダルで呼び出した後、今度は、モーダルフォームから戻り値を受け取りたい場合があります。

プロパティ(またはプロシージャ)を使った方法と、一時変数を使った方法があったのでメモしておきます。

目次

  • プロパティ(またはプロシージャ)の利用
  • 一時変数の利用
  • どれを利用するのがいいかの個人的な見解

プロパティ(またはプロシージャ)の利用

プロパティを使って戻り値を取得する場合、まず呼び出し元のフォームに以下のような戻り値用のプロパティを用意します。(呼び出し元のフォームを「商品検索画面」、モーダルで開くフォームを「商品登録画面」とした場合)


Dim blnReturnValue As Boolean

Property Let ReturnValue(value As Boolean)
    blnReturnValue = value
End Property

Property Get ReturnValue() As Boolean
    ReturnValue = blnReturnValue
End Property

プロパティを用意したら、今度はこのプロパティに対して、モーダルフォーム側から値をセットします。


Private Sub btn閉じる_Click()
    Form_商品検索画面.ReturnValue = True
    DoCmd.Close acForm, "商品登録画面", acSaveNo
End Sub

あとはモーダルフォームを閉じた後の処理で、上記のプロパティの値を読み取ればOKです。

上記はプロパティを利用していますが、Public指定のプロシージャ(FunctionやSub)を呼び出すことも可能です。

この方法の弱点は呼び出し元のフォームを特定しないといけない点で、フォーム同士の結合度が強くなり、複数の画面から呼び出されるフォームには向いていません。

一時変数の利用

モーダルフォームを開く際のパラメータでも紹介しましたが、戻り値を渡す際にも一時変数を使うことができます。

モーダルフォーム側で一時変数の値を設定して、


Private Sub btn閉じる_Click()
    TempVars("tmp商品登録画面_結果") = True
End Sub

呼び出し元でその一変数の内容を読み取るだけです。


Private Sub btn編集_Click()
    DoCmd.OpenForm "商品登録画面", acNormal, , , , acDialog

    Dim rtn As Boolean 
    rtn = TempVars("tmp商品登録画面_結果")
    Debug.Print rtn

    TempVars.Remove ("tmp商品登録画面_結果")
End Sub

簡単ですね。

どれを利用するのがいいかの個人的な見解

複数の画面で共有して使うようなフォームは一時変数で戻り値のやりとりを行い、特定の画面からしか呼び出されないフォームであれば、直接、呼び出し元フォームのプロパティやプロシージャを実行する方法でいいと思います。

Access】関連記事