#652 | ダイアログでの操作結果を呼び出し元フォームに返す方法(1) | フォーム、VBA | |
よくある画面のフローとして、画面のボタンをクリックしたらまずダイアログを表示し、そこでの入力値や選択肢に応じてそのあとの処理を切り替えるということがよくあります。 その際、一連の後処理もダイアログ側のモジュールに記述する方法がシンプルなのですが、一方で、呼び出し元フォームとダイアログ側とでデータをやり取りして、ダイアログ側の操作結果を呼び出し元で取得、呼び出し元のモジュールで後処理を行うということもあります。つまりダイアログは単に処理内容などを選択するためだけに使う方法です。 そのようなケースにおいて、ダイアログでどのような操作が行われたか、たとえばテキストボックスにどのような値が入力されたか、オプショングループでどのオプションボタンが選択されたか、あるいは実行を指示する[OK]ボタンがクリックされたのか中止を指示する[キャンセル]ボタンがクリックされたのかなどの操作結果を呼び出し元フォームに返す方法を説明します。 ここでは、『ダイアログ側のフォームモジュールの「Declarationsセクションで宣言されたPublic変数」を使う方法』について説明します。 まず、例として次のような2つのフォームを使うものとします。 ■呼び出し元のフォームデザイン ■ダイアログのフォームデザイン
一方、プログラムとしては、呼び出し元のフォームとダイアログのフォームのモジュールに次のようなコードを記述します。 ■呼び出し元のフォームのモジュール Private Sub cmdOpenDlg_Click() Const cstrDlgName As String = "ダイアログサンプル1" On Error GoTo Err_Handler 'ダイアログを開く DoCmd.OpenForm cstrDlgName, , , , , acDialog 'ダイアログでの操作を取得 With Forms(cstrDlgName) If .pblnOKBtn Then '[OK]ボタンがクリックされたとき Me!txt操作結果 = "OKボタンがクリックされました!" & vbCrLf & _ "入力された値は " & .pvarInputData & " です。" Else '[キャンセル]ボタンがクリックされたとき Me!txt操作結果 = "キャンセルされました!" End If End With Exit_Here: On Error Resume Next 'ダイアログを閉じる DoCmd.Close acForm, cstrDlgName Exit Sub Err_Handler: If Err.Number = 2450 Then 'ダイアログが[×]ボタンで閉じられたとき Me!txt操作結果 = "ダイアログが[×]ボタンで閉じられました!" End If Resume Exit_Here End Sub ■ダイアログのフォームのモジュール Option Compare Database Option Explicit Public pvarInputData As Variant '入力値を代入する変数 Public pblnOKBtn As Boolean 'OKが押されたかどうかのフラグ Private Sub cmdOK_Click() '[OK]ボタンクリック時 '入力値を変数に保存 pvarInputData = Me!txt入力値 'OKボタンのフラグをON pblnOKBtn = True 'このフォームを非表示にする Me.Visible = False End Sub Private Sub cmdCancel_Click() '[キャンセル]ボタンクリック時 'このフォームを非表示にする Me.Visible = False End Sub これらのプログラムの構造は次のようなイメージになっています。
※なお、ダイアログのウィンドウの右上の[×](閉じる)ボタンがクリックされた場合、ダイアログは非表示にはならずそのまま閉じられてしまいます。その場合、「With Forms(cstrDlgName)」の部分で開いていないフォームを参照しようとするため、エラーが発生します。そのようなときに備えて呼び出し元ではエラートラップを行い、そのような操作が行われたときの処理を行っています。 実行例: ■数値を入力して[OK]ボタンをクリックしたとき ■[キャンセル]ボタンをクリックしたとき ■ダイアログが[×]ボタンで閉じられたとき 関連Tips: ダイアログでの操作結果を呼び出し元フォームに返す方法(2) ダイアログでの操作結果を呼び出し元フォームに返す方法(3) |
|||
|
Copyright © T'sWare All rights reserved |