テーブルの構造として、大分類・中分類・小分類の3階層のフィールドを持ったマスタデータのようなものがあるとします(ここではテーブル名は「mtbl分類別商品マスタ」としています)。
このようなデータを使って画面にデータを表示する際、大分類→中分類→小分類の3つのコンボボックスを使ってデータを絞り込んでいく、次のような操作手順の画面を作る方法を紹介します。
- まず「大分類」のコンボボックスから項目を選択する
それによって、その大分類に属する中分類だけが「中分類」のコンボボックスのリストに表示される
- 次に「中分類」のコンボボックスから項目を選択する
それによって、その大分類・中分類に属する小分類だけが「小分類」のコンボボックスのリストに表示される
- 次に「小分類」のコンボボックスから項目を選択する
- その結果、指定された大分類・中分類・小分類に一致する商品データだけが絞り込まれてサブフォームに一覧表示される
フォームの作成は次のような手順で行います。
- まずメイン/サブフォームを作成します。
- メイン側はレコードソースは”なし”で、3つのコンボボックスを配置します。それぞれの名前は「大分類」・「中分類」・「小分類」とします。
- サブ側は「mtbl分類別商品マスタ」をレコードソースとする”データシート形式”のフォームで、ここでは編集は不可とします。
- 両者のリンクフィールドを「大分類;中分類;小分類」とします。「リンク親フィールド」のそれは3つのコンボボックスを表します。一方「リンク子フィールド」のそれは各コントロール名(=フィールド名)」です。
- それぞれのフォーム名は「frm分類別商品マスタ」、「frm分類別商品マスタ_sub」とします。
- メイン側の「大分類」コンボボックスの「値集合ソース」プロパティを下記のように設定します。
- 「中分類」コンボボックスの「値集合ソース」プロパティを下記のように設定します。
ここでのポイントは、「大分類」コンボボックスで選択された大分類に属する中分類だけを絞り込むため、「Where条件」に『[Forms]![frm分類別商品マスタ]![大分類]』を設定することです。
- 「小分類」コンボボックスの「値集合ソース」プロパティを下記のように設定します。
ここでのポイントは、「大分類」および「中分類」コンボボックスで選択された大分類・中分類に属する小分類だけを絞り込むため、「Where条件」に『[Forms]![frm分類別商品マスタ]![大分類]』かつ『[Forms]![frm分類別商品マスタ]![中分類]』を設定することです。
- この仕組みでは、あるコンボボックスは他のコンボボックスの値を参照しそれをWhere条件としていますが、参照先のコンボボックスの選択値が切り替わっても参照元の値集合ソースのリストは自動的には連動してくれません。そこで、プログラムを使って、参照先コンボボックスの値が更新された都度、参照元のコンボボックスを再クエリして、連動させます。
Private Sub 大分類_AfterUpdate()
'[大分類]の更新後処理
Me!中分類.Requery
Me!小分類.Requery
End Sub
Private Sub 中分類_AfterUpdate()
'[中分類]の更新後処理
Me!小分類.Requery
End Sub
実行例:
|