#653 ダイアログでの操作結果を呼び出し元フォームに返す方法(2) フォーム、VBA

よくある画面のフローとして、画面のボタンをクリックしたらまずダイアログを表示し、そこでの入力値や選択肢に応じてそのあとの処理を切り替えるということがよくあります。

その際、一連の後処理もダイアログ側のモジュールに記述する方法がシンプルなのですが、一方で、呼び出し元フォームとダイアログ側とでデータをやり取りして、ダイアログ側の操作結果を呼び出し元で取得、呼び出し元のモジュールで後処理を行うということもあります。つまりダイアログは単に処理内容などを選択するためだけに使う方法です。

そのようなケースにおいて、ダイアログでどのような操作が行われたか、たとえばテキストボックスにどのような値が入力されたか、オプショングループでどのオプションボタンが選択されたか、あるいは実行を指示する[OK]ボタンがクリックされたのか中止を指示する[キャンセル]ボタンがクリックされたのかなどの操作結果を呼び出し元フォームに返す方法を説明します。

ここでは、『標準モジュールの「Declarationsセクションで宣言されたPublic変数」をその受け渡し用に使う方法』について説明します。


まず、例として次のような2つのフォームを使うものとします。

■呼び出し元のフォームデザイン


■ダイアログのフォームデザイン

  1. 呼び出し元フォームでボタンをクリックしたらダイアログを表示します。
  2. ダイアログ側ではテキストボックスに数値を入力したあと[OK]ボタンをクリックするか、[キャンセル]ボタンをクリックします。
  3. ダイアログでの操作結果をテキストボックスに表示します。

一方、プログラムとしては、呼び出し元/ダイアログのフォームモジュール、および標準モジュールに次のようなコードを記述します。

■標準モジュール

Option Compare Database
Option Explicit

Public pvarDlgInp As Variant  '入力値を代入する変数
Public pblnDlgOK As Boolean   'OKが押されたかどうかのフラグ


■呼び出し元のフォームのモジュール

Private Sub cmdOpenDlg_Click()

  Const cstrDlgName As String = "ダイアログサンプル2"

  'Public変数を初期化
  pblnDlgOK = False

  'ダイアログを開く
  DoCmd.OpenForm cstrDlgName, , , , , acDialog

  'ダイアログでの操作を取得
  If pblnDlgOK Then
    '[OK]ボタンがクリックされたとき
    Me!txt操作結果 = "OKボタンがクリックされました!" & vbCrLf & _
                      "入力された値は " & pvarDlgInp & " です。"
  Else
    '[キャンセル]ボタンがクリックされたとき
    Me!txt操作結果 = "キャンセルされました!"
  End If

End Sub


■ダイアログのフォームのモジュール

Private Sub cmdOK_Click()
'[OK]ボタンクリック時

  '入力値を変数に保存
  pvarDlgInp = Me!txt入力値
  'OKボタンのフラグをON
  pblnDlgOK = True

  'このフォームを閉じる
  DoCmd.Close acForm, Me.Name

End Sub

Private Sub cmdCancel_Click()
'[キャンセル]ボタンクリック時

  'このフォームを閉じる
  DoCmd.Close acForm, Me.Name

End Sub


これらのプログラムの構造は次のようなイメージになっています。

  1. 呼び出し元では、引数に「acDialog」を指定することで”ダイアログサンプル2”フォームを”ダイアログ”として開きます。実行時、呼び出し元のプログラムはダイアログが閉じられるまでここで一時停止します。

  2. ダイアログ側でデータ入力やボタン操作が行われたら、その結果を”標準モジュール”のDeclarationsセクションのPublic変数に代入します。

  3. ダイアログ側では[OK]か[キャンセル]ボタンがクリックされたらこのフォームを閉じます。

  4. ダイアログが閉じられることで、いったん停止した呼び出し元のプログラムが再開されます。

  5. 呼び出し元で”標準モジュールのPublic変数”を参照することで、ダイアログでの入力・選択値やボタン操作結果などを取得し、それに応じて後処理を実行します。

※このPublic変数に代入された値は上記の2つのフォームが閉じられても保持され続けます。そのため、一連の処理を始める前もしくは参照が完了したら初期化しておくと確実です。


実行例:

■数値を入力して[OK]ボタンをクリックしたとき






■[キャンセル]ボタンをクリックしたとき



関連Tips:
ダイアログでの操作結果を呼び出し元フォームに返す方法(1)
ダイアログでの操作結果を呼び出し元フォームに返す方法(3)
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved