回答編集履歴
4
サンプルリンク追加
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
コード修正
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
追記
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
説明追記
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
|
+
これでフィールド名とフォーム上のコントロールとの区別がつきます。
|