>テーブルに仕入先 仕入先ID 仕入先名
> 担当者 担当者ID 担当者名 仕入先ID
>があります。
>
>フォームに仕入先と担当者を選択するコンポボックスがあります。
>
>やりたいことは仕入先名をコンポボックスから選択したら、
>担当者の方は仕入先名と同じ会社の担当者のみ表示したい。
>
>いまだと全部の仕入先の担当者が表示されてしまいます。
>
>その方法を教えてください。
やりたいことは、
コンボボックスを2つ作り、
第1 上のコンボボックスで選択されたグループだけを
第2 下のコンボボックスで選択する、
絞り込みながらの選択ですね。
たとえが いいか/適切か わかりませんが、
AKB48のメンバーをテストデータにして、
絞り込みのコンボボックスの練習をしてみたいと思います。
第1 上のコンボボックスで グループを選択する
第2 下のコンボボックスで上記グループのメンバーのみ表示する
現物を動かしながら が わかりやすいと思うので
/vba/zip/qa0720db.zip
を保存して、遊んでみてください。
そのまま、二つのコンボボックスを作成してみた
まずは、何も処理を入れないで、通常の方法でコンボボックスをします。
Accessのフォーム処理で、ウィザードでフォームをざっくり作ります。
その後、マスターを参照したいので、
テキストボックスをコントロールの変更でコンボボックスに変更します。
コンボボックスの値を クエリービルダーを使用して、
マスターテーブルと連動させます。
そんな下準備の操作動画 http://www.youtube.com/watch?v=v5tvuWjfqRI です
www.youtube.com
↑準備で時間がかかりすぎてるけど、、、
やっと、連動処理を入れてみる
ここで、やっと、
Accessのフォーム処理で、
コンボボックス2つを使って、
マスターデータを絞り込む そんな処理をざっくり作ります。
1つ目でグループを選択、
2つ目のコンボボックスは1の値を利用してデータを絞る、そんな処理です。
ポイントは、クエリービルダーを使用して、画面の値とテーブルを連動させます。
1の値が [Forms]![メモinput]![課ID] なので、これを条件に入れる(指定します)
たったこれだけなのですが、
データは生き物?じゃないけど、各処理のタイミングでデータを絞り込んだり、クリアしたりします。
そのために、コードを2つ入れます。
再クエリー .Requery でデータを再度絞り込む
1.コンボボックス2に入ってきたときに、再クエリー処理で、データをきれいにします。単純に のイベント フォーカス取得時の _Enterにコードを書きます。
Private Sub 担当者ID_Enter() Me.担当者ID.Requery '再クエリー更新 End Sub
Me.担当者ID.Requery 自分自身に対して、再クエリーをかけて、1で選択されたグループのみにデータを絞り込みます。
グループが変更されたら、下のコンボボックスをクリアする
2.上のグループが選択(変更)されたら、2つ目メンバーをクリアーしたいので(グループが変わったので再選択させたい)
単純に更新後の処理 _AfterUpdate で 下のコンボボックスの値を消しただけです。
Private Sub 課ID_AfterUpdate() Me.担当者ID.Value = "" 'グループが変更されたらクリア End Sub
これで、それなりに動くと思います。
試行錯誤の動画、操作・テスト結果は http://www.youtube.com/watch?v=bdrtLlkE-lw を見てください
www.youtube.com
↑前半、調整に手間取り、後半かけ足で説明してますがよろしくです。
終わりの挨拶
現物を動かしながらがわかりやすいと思うので。
/vba/zip/qa0720db.zip
を保存して、遊んでみてください
コンボボックス2つの連動処理の参考となれば、、、うれしいです。
三流プログラマー Ken3