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