【Access】コンボボックスの内容を動的に決定する方法(1)

今回はAccessのフォームにあるコンボボックスの内容を動的に決定する方法をご紹介します。

はじめに

フォームにあるコンボボックスの内容を動的に決定するというのは、図1のようなイメージです。

図1:コンボボックスの内容を動的に決定する例

フォーム上にクラスというコンボボックスと名前というコンボボックスがあります。今回は、図1のようにクラスというコンボボックスの内容を決定すると、名前というコンボボックスにそのクラスに所属する人の名前のみを表示するようにしてみたいと思います。

フォームを作成する上で、連結フォームと非連結フォームの場合があると思いますが、今回は連結フォームの場合について説明していこうと思います。(非連結については、またいつか書こうと思っています。)

今回の例で使用するのは、T_クラス(図2)、T_メンバー(図3)、T_得点(図4、図5)というテーブル、F_scoreというフォーム(図1)です。

図2:T_クラス

図3:T_メンバー

図4、図5はT_得点のデザインビュー画面です。クラスと名前というフィールドをルックアップフィールドとして設定しています。ルックアップフィールドについては、以前に記事がありますので、下記をご覧ください。

お久しぶりです。更新をさぼっているTomです(><;) 今回はAccessにおけるルックアップフィールドについて書いていこうと思います。

図4:T_得点、クラスのルックアップ設定

図5:T_得点(名前のルックアップ設定)

設定方法

今回の例では図5のT_得点をベースにフォームを作成してみます。フォームウィザードを使用して、フォームを作成します。

図6:フォームウィザード

図6のようにT_得点の「選択可能なフィールド」をすべて「選択したフィールド」の方に入れましょう。また、ここでのフォームのレイアウトは単票形式とします。

フォームの作成が完了したら、フォームをデザインしていきます。この例ではわかりやすくするために、クラスのコンボボックスの名前をCb_class、名前のコンボボックスの名前をCb_nameとして設定しました。(プロパティシートのその他タブの中にある名前をCb_classのように編集しています。)

Cb_classのプロパティシートのイベントタブの更新後処理(□の中に…マーク)をクリックして、コードビルダーを開きます。

図7:Cb_classのプロパティ(イベント更新後処理)

VBAが開いたら、次のコードを入力します。

Private Sub Cb_class_AfterUpdate()
    DoCmd.Requery ("Cb_name")
End Sub

Cb_classのイベント更新後処理にこのコードを入力することで、Cb_classの更新後にCb_nameの再クエリを行います。これにより、コンボボックスのクラスが選択されるたびに、コンボボックスの名前の内容が更新(再クエリ)されるようになります。

次にCb_nameの設定をしたいと思います。Cb_nameのプロパティシートのデータタブの中にある値集合ソース(□の中に…マーク)をクリックします。

図8:Cb_nameのプロパティ(値集合ソース)

クエリビルダーが開くので、次に図9のように設定します。

図9:クエリビルダー

クエリビルダーが開いたら、図9のようにクエリを作成します。ここでのポイントは、クラスの抽出条件に下記のように入力しているところです。

[Forms]![F_score]![Cb_class]

上記を抽出条件に入力することで、「F_scoreというフォームにあるCb_classの内容」を抽出することができます。ここまで入力できたらクエリビルダーを閉じます。(「SQLステートメントの変更を保存し、プロパティの設定を更新しますか?」と表示された場合は、「はい」をクリックします。)これで、Cb_nameに表示される内容はCb_classの内容によって動的に変化するようになりました。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする