回答編集履歴

4

サンプルリンク追加

2020/06/16 12:48

投稿

hatena19
hatena19

スコア34064

test CHANGED
@@ -118,6 +118,12 @@
118
118
 
119
119
 
120
120
 
121
+ 文章では伝わりづらいところがありますので、下記にサンプルファイルを置いておきます。参考にしてください。
122
+
123
+
124
+
125
+ [帳票フォームでコンボボックスのリストを制限する方法 Microsoft Access 掲示板 - zawazawa](https://zawazawa.jp/ms-access/topic/200)
126
+
121
127
 
122
128
 
123
129
  追記

3

コード修正

2020/06/16 12:48

投稿

hatena19
hatena19

スコア34064

test CHANGED
@@ -102,7 +102,7 @@
102
102
 
103
103
  ```vba
104
104
 
105
- Private Sub cb担当者_Enter()
105
+ Private Sub cb2担当者_Enter()
106
106
 
107
107
  Me.cb担当者.SetFocus
108
108
 

2

追記

2020/06/16 11:34

投稿

hatena19
hatena19

スコア34064

test CHANGED
@@ -70,6 +70,56 @@
70
70
 
71
71
 
72
72
 
73
+ 帳票フォームの場合
74
+
75
+ ---
76
+
77
+ 単票フォームは上記の設定でOKですが、帳票フォームだとリストを制限したときに、他のレコードのデータが表示されない場合があります。その場合は下記のようにしてください。
78
+
79
+
80
+
81
+ 現状のコンボボックスの上にテキストボックスを配置して、下記のように設定します。
82
+
83
+
84
+
85
+ 名前 cb2担当者
86
+
87
+ コントロールソース 担当者
88
+
89
+ 値集合ソース SELECT 担当番号, 担当者 FROM 担当テーブル;
90
+
91
+ 連結列 1
92
+
93
+ 列数 2
94
+
95
+ 列幅 0cm
96
+
97
+ タブストップ いいえ
98
+
99
+
100
+
101
+ このコンボボックスのフォーカス取得時のイベントプロシージャ
102
+
103
+ ```vba
104
+
105
+ Private Sub cb担当者_Enter()
106
+
107
+ Me.cb担当者.SetFocus
108
+
109
+ End Sub
110
+
111
+ ```
112
+
113
+ 以上です。
114
+
115
+
116
+
117
+ やっていることは、コンボボックスのリストを制限すると、他のレコードで除外された顧客名が非表示になります。そのため、コンボボックスの上にさらにコンボボックスを重ねて、そのコンボボックスはリストを制限しないようにします。この上のコンボボックスにはフォーカスが来た時には、下のコンボボックスにフォーカスを移動させます。アクティブになったコントロールは前面に浮き上がってきます。
118
+
119
+
120
+
121
+
122
+
73
123
  追記
74
124
 
75
125
  ----

1

説明追記

2020/06/16 04:26

投稿

hatena19
hatena19

スコア34064

test CHANGED
@@ -70,4 +70,66 @@
70
70
 
71
71
 
72
72
 
73
+ 追記
74
+
73
- 以上です。
75
+ ----
76
+
77
+ 別のスレッドで質問が出ていたので、
78
+
79
+ 顧客番号のテキストボックスの名前とコントロールソースの設定を変える理由を追加しておきます。
80
+
81
+
82
+
83
+ コントロールソース 顧客番号
84
+
85
+ 名前 txt顧客番号
86
+
87
+
88
+
89
+ コントロールソースには連結テーブルのフィールド名を設定します。
90
+
91
+ デフォルトではフィールド名と同じ名前になっているので、上記のように名前を変更しておきます。
92
+
93
+
94
+
95
+ コンボボックスの値集合ソースで、フォーム上の顧客番号でリストデータを制限(抽出)するときに、下記のようなクエリ(SQL)を設定したとします。
96
+
97
+
98
+
99
+ `SELECT 担当番号, 担当者 FROM 担当テーブル WHERE 顧客番号 = 顧客番号;`
100
+
101
+
102
+
103
+ こうすると、この顧客番号はどちらもSQL内の担当テーブルの「顧客番号」ということになるので常にTureになり制限できないことになります。
104
+
105
+
106
+
107
+ `SELECT 担当番号, 担当者 FROM 担当テーブル WHERE 顧客番号 = txt顧客番号;`
108
+
109
+
110
+
111
+ とすると、前の「顧客番号」は担当テーブルのフィールド名になり、txt顧客番号 は担当テーブルにはないので、フォームから探すことになり、フォーム上のコントロールの txt顧客番号 を参照することになります。
112
+
113
+ これでフォーム上の顧客番号の値で、コンボボックスのリストが制限されることになります。
114
+
115
+
116
+
117
+ もし、
118
+
119
+
120
+
121
+ コントロールソース 顧客番号
122
+
123
+ 名前 顧客番号
124
+
125
+
126
+
127
+ というようにコントロールソースと名前が同じときは、下記のようなSQLにすることになります。
128
+
129
+
130
+
131
+ `SELECT 担当番号, 担当者 FROM 担当テーブル WHERE 顧客番号 = Forms!フォーム名!顧客番号;`
132
+
133
+
134
+
135
+ これでフィールド名とフォーム上のコントロールとの区別がつきます。