#653 | ダイアログでの操作結果を呼び出し元フォームに返す方法(2) | フォーム、VBA | |
よくある画面のフローとして、画面のボタンをクリックしたらまずダイアログを表示し、そこでの入力値や選択肢に応じてそのあとの処理を切り替えるということがよくあります。 その際、一連の後処理もダイアログ側のモジュールに記述する方法がシンプルなのですが、一方で、呼び出し元フォームとダイアログ側とでデータをやり取りして、ダイアログ側の操作結果を呼び出し元で取得、呼び出し元のモジュールで後処理を行うということもあります。つまりダイアログは単に処理内容などを選択するためだけに使う方法です。 そのようなケースにおいて、ダイアログでどのような操作が行われたか、たとえばテキストボックスにどのような値が入力されたか、オプショングループでどのオプションボタンが選択されたか、あるいは実行を指示する[OK]ボタンがクリックされたのか中止を指示する[キャンセル]ボタンがクリックされたのかなどの操作結果を呼び出し元フォームに返す方法を説明します。 ここでは、『標準モジュールの「Declarationsセクションで宣言されたPublic変数」をその受け渡し用に使う方法』について説明します。 まず、例として次のような2つのフォームを使うものとします。 ■呼び出し元のフォームデザイン ■ダイアログのフォームデザイン
一方、プログラムとしては、呼び出し元/ダイアログのフォームモジュール、および標準モジュールに次のようなコードを記述します。 ■標準モジュール 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 これらのプログラムの構造は次のようなイメージになっています。
※このPublic変数に代入された値は上記の2つのフォームが閉じられても保持され続けます。そのため、一連の処理を始める前もしくは参照が完了したら初期化しておくと確実です。 実行例: ■数値を入力して[OK]ボタンをクリックしたとき ■[キャンセル]ボタンをクリックしたとき 関連Tips: ダイアログでの操作結果を呼び出し元フォームに返す方法(1) ダイアログでの操作結果を呼び出し元フォームに返す方法(3) |
|||
|
Copyright © T'sWare All rights reserved |