teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

誤字修正

2020/07/05 13:37

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -6,7 +6,7 @@
6
6
  フォームCを閉じると、フォームBは更新が反映されている。
7
7
 
8
8
  一般的にダイアログボックスを開いているときはそれ以外での操作はできないようになります。
9
- (InputBox, Msgbox, ファイル選択大なログなど)
9
+ (InputBox, Msgbox, ファイル選択ダイアログなど)
10
10
 
11
11
  現状の問題点は、「ポップアップ」に設定するとアクティブイベントが発生しないというという点ですね(これはAccessの仕様のようです。)
12
12
 
@@ -27,7 +27,7 @@
27
27
  End Sub
28
28
 
29
29
  Private Sub ボタン1_Click()
30
- DoCmd.OpenForm "フォームC", , , , , acDialog 'ダイアログモードで開く
30
+ DoCmd.OpenForm "フォームC", WindowMode:=acDialog 'ダイアログモードで開く
31
31
  Call ShowDate
32
32
  End Sub
33
33
  ```

1

蛇足追記

2020/07/05 13:37

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -32,4 +32,39 @@
32
32
  End Sub
33
33
  ```
34
34
 
35
- ダイアログモード(WindowMode:=acDialog)で開くと、フォームはポップアップかつ他のオブジェクトは操作できない状態で開く。さらに、開いたフォームが閉じるまで、次のコードは実行されない。というダイアログボックスと同様の仕様になります。
35
+ ダイアログモード(WindowMode:=acDialog)で開くと、フォームはポップアップかつ他のオブジェクトは操作できない状態で開く。さらに、開いたフォームが閉じるまで、次のコードは実行されない。というダイアログボックスと同様の仕様になります。
36
+
37
+ ---
38
+ 質問内容とはずれますが、
39
+
40
+ > ボタン1を押下すると、テキストボックス1へ入力した値をpublic変数s_codeへ代入し、
41
+ フォームBを開き、フォームAを閉じる。
42
+
43
+ public変数は、複雑なシステムになってくると想定外に書き変わっていたりとかのバグの元になるので、できる限り使用しないというのが定説です。
44
+
45
+ OpenFormメソッドには、OpenArgs引数という値を渡すことのできる引数がありますので、それを利用するのが得策だと思います。
46
+
47
+
48
+ フォームA
49
+ ```vba
50
+ Private Sub ボタン1_Click()
51
+ DoCmd.OpenForm "フォームB", OpenArgs:=Me.テキストボックス1.Value
52
+ DoCmd.Close acForm, Me.Name
53
+ End Sub
54
+ ```
55
+
56
+ フォームB
57
+ ```vba
58
+ Private s_code
59
+
60
+ Private Sub ShowDate()
61
+ 'テーブルAの変数s_codeに合致するレコードの各フィールドの値を
62
+ 'テキストボックス1~5へ表示するコード
63
+ End Sub
64
+
65
+ 'フォームの読み込み時
66
+ Private Sub Form_Load()
67
+ s_code = Me.OpenArgs
68
+ Call ShowDate
69
+ End Sub
70
+ ```