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