MS Access Tips/Sample and VBA and Blog customize etc...

どちらから入力してもリスト制限される2つのコンボボックス

帳票フォームのヘッダーに2つのコンボボックスがあり、選択した値でフォームのレコードを絞り込みます。その場合、Aのコンボボックスを選択したら、BのコンボボックスのリストはAの値で絞り込まれるようにしたい。逆にBの方から入力した場合も同様にAのリストが絞り込まれるようにしたい。

というような要件のサンプルです。片方がリスト制限される例はあちこちでサンプルがありますが、どちらからでもというのは見かけないので紹介します。

下記のURLの関連です。

「フォーム用のクエリ」というのが発想できません。

FrmMultiComboBoxFilter.png

難易度:

仕様

テーブルデータ例

Sampleテーブル
ID入荷日品目
12010/12/01みかん
22010/12/01りんご
32010/12/02バナナ
42010/12/02みかん

このテーブルをレコードソースにした帳票フォーム(sampleフォーム)を作成します。フォームヘッダーにコンボボックスを2つ(cb入荷日, cb品目)を配置します。

cb入荷日 で日付を選択するとその日付で帳票フォームのレコードが絞り込まれます。同時に、cb品目にフォーカス移動して、cb品目のリストも同様に絞り込まれて開かれます。

その後、cb品目で値を品目を選択すると、cb入荷日 と cb品目 の値でフォームのレコードは絞り込まれます。

逆に、cb品目から先に入力しても、同様な動作になります。

サンプル作成

このような要件なら、VBAでFilterをかける方が自由度が高くていいのですが、VBA初心者向けにVBAは最小限にして、クエリ(SQL)の抽出条件で絞り込むようにしました。

まず、sampleフォーム のレコードソース:

これで、cb入荷日, cb品目 が未入力(Null)の時は全件表示され、どちらが入力されている場合は、入力されている値に合致するデータが、両方入力されいる場合は、両方に合致するデータが表示されます。

なお、品目 Like [Forms]![sampleフォーム]![cb品目] & "*"というような抽出条件にする方法もありますが、これだと テーブルの品目にNull値があるとそのレコードは抽出されなくなります。

cb入荷日 の値集合ソース:

cb入荷日の値集合ソース:

フォームモジュール

サンプルMDB が下記からダウンロードできます。
FrmMultiComboBoxFilter_07.zip (Access 2007 形式 - 26kb)
FrmMultiComboBoxFilter.zip (Access 2002-2003 形式 - 30kb)
FrmMultiComboBoxFilter_2k.zip (Access 2000 形式 - 28kb)


拍手する

2 Comments

へそくりオヤジ says..."はじめまして^^"

こんにちは^^ 
ブログのカスタマイズについて色々ネット上をさまよってるうちにこちらに辿り着きました。
凄いの一言です@@
FC2ブログでここまで出来るなんて! テクニックだけじゃなくセンスもバツグンです!
しかもプロのプログラマーでも何でもないとのこと、感服しました。
ド素人の私ですがこちらの「カテゴリ別全記事一覧ページを作る」ページを参考に作ってみたら、あっという間にできました@@
コピペするだけですから当たり前ですが・・・w

カテゴリの開閉には対応させてませんが、こちらのサイトを参考にして、また挑戦してみたいと思います!

他にも凄いテクニック満載なんで、ちょくちょく遊びにきたいと思います♪

2010.04.16 16:16 | URL | #Si2BarZE [edit]
hatena says..."はじめまして*^^*"

お褒めのお言葉、ありがとうございます。

私も手探りでやってますので、不具合などもけっこうあったりして、
指摘していただいて直したりしています。
分からないことやおかしなところがあればお気軽におたずねください。

あっ、それから、
アフェリエイトでへそくりがたまるぐらいお小遣い稼ぎができるのかな?
ちょっと興味があるので、へそくりオヤジ さんのブログ、参考にさせていただきます。

2010.04.17 10:32 | URL | #5uE6dEgY [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/257-c2da1acb
該当の記事は見つかりませんでした。