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

回答編集履歴

4

サンプルリンク追加

2020/06/16 12:48

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -58,7 +58,10 @@
58
58
 
59
59
  やっていることは、コンボボックスのリストを制限すると、他のレコードで除外された顧客名が非表示になります。そのため、コンボボックスの上にさらにコンボボックスを重ねて、そのコンボボックスはリストを制限しないようにします。この上のコンボボックスにはフォーカスが来た時には、下のコンボボックスにフォーカスを移動させます。アクティブになったコントロールは前面に浮き上がってきます。
60
60
 
61
+ 文章では伝わりづらいところがありますので、下記にサンプルファイルを置いておきます。参考にしてください。
61
62
 
63
+ [帳票フォームでコンボボックスのリストを制限する方法 Microsoft Access 掲示板 - zawazawa](https://zawazawa.jp/ms-access/topic/200)
64
+
62
65
  追記
63
66
  ----
64
67
  別のスレッドで質問が出ていたので、

3

コード修正

2020/06/16 12:48

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -50,7 +50,7 @@
50
50
 
51
51
  このコンボボックスのフォーカス取得時のイベントプロシージャ
52
52
  ```vba
53
- Private Sub cb担当者_Enter()
53
+ Private Sub cb2担当者_Enter()
54
54
  Me.cb担当者.SetFocus
55
55
  End Sub
56
56
  ```

2

追記

2020/06/16 11:34

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -34,6 +34,31 @@
34
34
  End Sub
35
35
  ```
36
36
 
37
+ 帳票フォームの場合
38
+ ---
39
+ 単票フォームは上記の設定でOKですが、帳票フォームだとリストを制限したときに、他のレコードのデータが表示されない場合があります。その場合は下記のようにしてください。
40
+
41
+ 現状のコンボボックスの上にテキストボックスを配置して、下記のように設定します。
42
+
43
+ 名前 cb2担当者
44
+ コントロールソース 担当者
45
+ 値集合ソース SELECT 担当番号, 担当者 FROM 担当テーブル;
46
+ 連結列 1
47
+ 列数 2
48
+ 列幅 0cm
49
+ タブストップ いいえ
50
+
51
+ このコンボボックスのフォーカス取得時のイベントプロシージャ
52
+ ```vba
53
+ Private Sub cb担当者_Enter()
54
+ Me.cb担当者.SetFocus
55
+ End Sub
56
+ ```
57
+ 以上です。
58
+
59
+ やっていることは、コンボボックスのリストを制限すると、他のレコードで除外された顧客名が非表示になります。そのため、コンボボックスの上にさらにコンボボックスを重ねて、そのコンボボックスはリストを制限しないようにします。この上のコンボボックスにはフォーカスが来た時には、下のコンボボックスにフォーカスを移動させます。アクティブになったコントロールは前面に浮き上がってきます。
60
+
61
+
37
62
  追記
38
63
  ----
39
64
  別のスレッドで質問が出ていたので、

1

説明追記

2020/06/16 04:26

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -34,4 +34,35 @@
34
34
  End Sub
35
35
  ```
36
36
 
37
+ 追記
37
- 以上です。
38
+ ----
39
+ 別のスレッドで質問が出ていたので、
40
+ 顧客番号のテキストボックスの名前とコントロールソースの設定を変える理由を追加しておきます。
41
+
42
+ コントロールソース 顧客番号
43
+ 名前 txt顧客番号
44
+
45
+ コントロールソースには連結テーブルのフィールド名を設定します。
46
+ デフォルトではフィールド名と同じ名前になっているので、上記のように名前を変更しておきます。
47
+
48
+ コンボボックスの値集合ソースで、フォーム上の顧客番号でリストデータを制限(抽出)するときに、下記のようなクエリ(SQL)を設定したとします。
49
+
50
+ `SELECT 担当番号, 担当者 FROM 担当テーブル WHERE 顧客番号 = 顧客番号;`
51
+
52
+ こうすると、この顧客番号はどちらもSQL内の担当テーブルの「顧客番号」ということになるので常にTureになり制限できないことになります。
53
+
54
+ `SELECT 担当番号, 担当者 FROM 担当テーブル WHERE 顧客番号 = txt顧客番号;`
55
+
56
+ とすると、前の「顧客番号」は担当テーブルのフィールド名になり、txt顧客番号 は担当テーブルにはないので、フォームから探すことになり、フォーム上のコントロールの txt顧客番号 を参照することになります。
57
+ これでフォーム上の顧客番号の値で、コンボボックスのリストが制限されることになります。
58
+
59
+ もし、
60
+
61
+ コントロールソース 顧客番号
62
+ 名前 顧客番号
63
+
64
+ というようにコントロールソースと名前が同じときは、下記のようなSQLにすることになります。
65
+
66
+ `SELECT 担当番号, 担当者 FROM 担当テーブル WHERE 顧客番号 = Forms!フォーム名!顧客番号;`
67
+
68
+ これでフィールド名とフォーム上のコントロールとの区別がつきます。