概要
今回も備忘です。
今回はかなりピンポイントですが、Accessでナビゲーションフォームを使う人には結構ぶちあたりそうな部分だったりします。
コード
早速ですが、コードを書いていきます。
今回はナビゲーションフォームに設置したサブフォーム上のコンボボックスの選択肢(値集合ソース/以下、ComboA)を別のコンボボックスで選択した値(以下、ComboB)を条件として絞り込む(WHERE条件)コードを作ります。
会社名と名前の一覧が書かれたテーブルを担当者一覧(表1)に示しました。
ComboAを担当者、ComboBを会社名として、ComboBで会社名を変えた時、ComboAの選択肢を動的に変えてみます。
会社名に青紙社と入れると担当者の選択肢に宇藤さん・江藤さん・尾藤さんが選べるようになるイメージです。
表1 担当者一覧
会社名 | 担当者 |
---|---|
赤紙社 | 阿藤 鷹 |
赤紙社 | 伊藤 滝 |
青紙社 | 宇藤 卓 |
青紙社 | 江藤 岳 |
青紙社 | 尾藤 凧 |
コード1 VBA サブフォームのモジュール内 に書くコード
1 2 3 4 5 6 |
Private Sub ComboB_Change() Me.ComboA.RowSource = "SELECT DISTINCT 担当者, 会社名 From 担当者一覧 WHERE 会社名 = [Forms]![ナビゲーションフォーム名]![NavigationSubform].[Form]![ComboB]" Forms![ナビゲーションフォーム名]![NavigationSubform].Form![ComboA].Requery End Sub |
ComboB_Change はComboB(会社名)の値が変わった時のイベントです。ComboBの値が変わった時に動きます。
RowSource は値集合ソースです。 ComboA(担当者)の選択肢を動的に変更します。
SQL文のWHERE条件では、サブフォームから指定するとエラーになるため、まずはナビゲーションフォームを指定してあげます。
例)[Forms]![ナビゲーションフォーム名]
で、ComboB(会社名)はナビゲーションフォームからするとサブフォームにあたるので、[NavigationSubform].[Form]としてあげてからComboBを指定します。
例)[Forms]![ナビゲーションフォーム名]![NavigationSubform].[Form]![ComboB]
ComboAのWhere条件にComboBを指定することで、ComboBの値が変わった時にComboAの選択肢がComboBで指定した会社名の担当者に変わります。
今日はここまで。
ノシ
---コメント---