タイトルと質問内容から、フォームC をダイアログボックス的な仕様にしたいということと推測しました。
具体的には下記のような仕様。
フォームBで該当データを表示させる(閲覧)
ボタン1でフォームCを呼び出して、そこで該当データを更新する。
フォームCを閉じると、フォームBは更新が反映されている。
一般的にダイアログボックスを開いているときはそれ以外での操作はできないようになります。
(InputBox, Msgbox, ファイル選択ダイアログなど)
現状の問題点は、「ポップアップ」に設定するとアクティブイベントが発生しないというという点ですね(これはAccessの仕様のようです。)
あと「ポップアップ」を設定するだけでは、他のフォームの操作ができてしまうというのも問題だと思います。
フォームCを開いている間にフォームBでデータ操作したり、閉じたりしたすると、いろいろ複雑になりバグの元になります。
自分ならフォームBのボタン1のクリック時のイベントプロシージャを下記のようなコードにします。
vba
1 Private Sub ShowDate ( )
2 'テーブルAの変数s_codeに合致するレコードの各フィールドの値を
3 'テキストボックス1~5へ表示するコード
4 End Sub
5
6 Private Sub Form_Load ( )
7 Call ShowDate
8 End Sub
9
10 Private Sub ボタン 1 _Click ( )
11 DoCmd . OpenForm "フォームC" , WindowMode : = acDialog 'ダイアログモードで開く
12 Call ShowDate
13 End Sub
ダイアログモード(WindowMode:=acDialog)で開くと、フォームはポップアップかつ他のオブジェクトは操作できない状態で開く。さらに、開いたフォームが閉じるまで、次のコードは実行されない。というダイアログボックスと同様の仕様になります。
質問内容とはずれますが、
ボタン1を押下すると、テキストボックス1へ入力した値をpublic変数s_codeへ代入し、
フォームBを開き、フォームAを閉じる。
public変数は、複雑なシステムになってくると想定外に書き変わっていたりとかのバグの元になるので、できる限り使用しないというのが定説です。
OpenFormメソッドには、OpenArgs引数という値を渡すことのできる引数がありますので、それを利用するのが得策だと思います。
フォームA
vba
1 Private Sub ボタン 1 _Click ( )
2 DoCmd . OpenForm "フォームB" , OpenArgs : = Me . テキストボックス 1 . Value
3 DoCmd . Close acForm , Me . Name
4 End Sub
フォームB
vba
1 Private s_code
2
3 Private Sub ShowDate ( )
4 'テーブルAの変数s_codeに合致するレコードの各フィールドの値を
5 'テキストボックス1~5へ表示するコード
6 End Sub
7
8 'フォームの読み込み時
9 Private Sub Form_Load ( )
10 s_code = Me . OpenArgs
11 Call ShowDate
12 End Sub
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/07 10:02