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

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

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

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

ここでは、『呼び出し元のフォームモジュールの「Declarationsセクションで宣言されたPublic変数」を使う方法』について説明します。


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

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


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

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

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

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

Option Compare Database
Option Explicit

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

Private Sub cmdOpenDlg_Click()

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

  'Public変数を初期化
  pblnOKClick = False

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

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

End Sub


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

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

  '呼び出し元フォームのPublic変数への代入
  With Forms!ダイアログを開くサンプル3
    '入力値を変数に保存
    .pvarInpValue = Me!txt入力値
    'OKボタンのフラグをON
    .pblnOKClick = True
  End With

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

End Sub

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

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

End Sub


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

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

  2. ダイアログ側でデータ入力やボタン操作が行われたら、その結果を呼び出し元のDeclarationsセクションの変数に代入します。これらはPublicで宣言することで、他のフォームモジュールからも値を”代入”することができます。

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

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

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

※このPublic変数に代入された値は呼び出し元フォームが開いている間、保持され続けます。フォームを開いたまま再度ダイアログ呼び出しが実行される可能性もあるため、ダイアログを開く前に初期化しておくと確実です。


実行例:

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






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



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



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