フォームに2つのコンボボックスを配置し、1つ目を選択すると、それに関連するリストが2つ目に表示されるようにします。
ポイントは選択クエリで抽出することと、1つ目が選択された時に2つ目を更新することです。更新は、更新後処理イベントのVBAで行います。
ここでは都道府県を選択すると、その都道府県にある市町村のリストから選択できるようにします。
都道府県が登録されている「T-都道府県」テーブルです。
都道府県IDフィールドはオートナンバー型になっています。
市町村名が登録されている「T-市町村」テーブルです。
都道府県コードの値は、「T-都道府県」テーブルの都道府県IDとリンクしています。
フォームに1つ目のコンボボックスを作成する
リボンの[作成]~フォームグループの[フォームデザイン]をクリックします。
1.リボンの[フォーム デザインツール]~[デザイン]から[コンボボックス]を選択します。
2.フォームに配置します。
3.コンボボックス ウィザードが開始します。 ウィザードが開始しない場合は、コントロール選択の下にある、[コントロール ウィザードの使用]をONにしてください。
「このウィザードは、選択可能な値を表示するコンボボックスを作成します。コンボボックスに表示する値の種類を選択してください。」から[コンボボックスの値を別のテーブルまたはクエリから取得する]を選択します。
「コンボボックスの値の取得元となるテーブルまたはクエリを選択します。」から、都道府県が登録されている「T-都道府県」テーブルを選択します。
「コンボボックスの値の取得元となるT-都道府県のフィールドを選択します。選択したフィールドは、コンボボックスの列として表示されます。」から全フィールドを選択します。
「リストボックスの項目の並べ替えを指定してください。並べ替えを行うフィールドを4つまで選択できます。それぞれのフィールドごとに昇順または降順を指定できます。」から「都道府県ID」フィールドを指定します。
「コンボボックスに表示する列の幅を指定してください。列幅を調整するには、列の右端をドラッグします。また、右端をダブルクリックすると、入力した値の長さに合わせて列幅が自動的に調整されます。」の[キー列を表示しない]にチェックが入っていることを確認します。
「コンボボックスに付けるラベルを指定してください。」に入力します。
ここでは「都道府県名選択:」にしました。
これでウィザードは終了です。
フォームの名前を「F-都道府県」にし保存します。
フォームビューを行うと、下のようになります。
クエリを作成し、抽出条件を設定する
リボンの[作成]~[クエリ デザイン]をクリックします。
テーブルの表示ダイアログが開くので、T-市町村テーブルを選択します。
1.全てのフィールドをダブルクリックし、下の表に移動します。
2.都道府県コードフィールドの抽出条件欄で右クリックし、表示されるメニューの[ビルド]をクリックします。
式ビルダーが開きます。
1.式の要素から、使用しているデータベース内の「F-都道府県」フォームを選択します。
2.式のカテゴリから、上で作成したコンボボックスの「コンボ0」を選択しダブルクリックします。
[OK]ボタンをクリックし、式ビルダーを閉じます。
1.抽出条件に、式ビルダで作成した式が入力されていることを確認してください。
2.クエリを保存します。ここでは「Q-市町村」にしました。
2つのコンボボックスを連動するようにリンクする
1.リボンの[フォーム デザインツール]~[デザイン]から[コンボボックス]を選択します。
2.フォームに配置します。
3.コンボボックス ウィザードが開始します。 取得元にクエリを選択します。
4.上で作成した「Q-市町村」を選択します。後は1つ目のコンボボックスと同様に設定します。
作成した2つ目のコンボボックスを選択し、列幅プロパティの「市町村ID」と「都道府県ID」の列幅を0に変更します。
以上で2つのコンボボックスはリンクできましたが、この時点では1つ目のコンボボックスの値が変更された場合、2つ目のコンボボックスに反映されないため更新するようにします。
1つ目のコンボボックスを選択した状態で、更新後処理プロパティから[イベント プロシージャ]を選択します。
更新後処理イベントのVBAです。
・2つ目のコンボボックスの値をNULLにします。
・Requeryを実行し更新します。
Private Sub コンボ0_AfterUpdate()
Me!コンボ2 = Null
Me!コンボ2.Requery
End Sub
これで2つのコンボボックスを連動させることができました。
下の画面では、青森県を選択すると、青森県にある市町村のリストが表示され選択できます。