<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
 MS-Access2002チョ〜入門部屋>コンボボックスを使った絞込みのしくみ
   



絞込みの仕組みの活用

オマケのさらにオマケです。
実際に、どういう使い方をしていくか、というところまで、少しだけ足を伸ばしてみようと思います。



■コンボボックスからテキストボックスに郵便番号代入

じゃあ、このコンボボックスの中から、郵便番号を取り出して、別のテキストボックスに入れてみましょうか。

ツールボックスから、テキストボックスのボタンをクリックして(abって書いてあるボタン)、フォーム内のどこかをクリックします。
非連結のテキストボックスができます。私の場合は・・・ テキスト8 っていう名前のテキストボックスになりました。

そしたら、最後に作ったコンボボックスの、更新後処理プロパティで、 「テキスト8に郵便番号を移動する」という処理を作ってみましょう。

コンボボックスってちょっと変わった構造をしてるんですけどね。
「値集合ソース」欄に記したデータ群の中の、

 1列目・・・・> コンボボックス名.Column(0)
 2列目・・・・> コンボボックス名.Column(1)
 3列目・・・・> コンボボックス名.Column(2)

っていう具合に指定することができるんです。Columnっていうのは、コンボボックス特有のプロパティで、半角のドットで区切って入力してやります。

こんな感じですね↑
これで、コンボ6から地区名を選び出したら、コンボ6の1列目の値を(わたしは1列目を郵便番号にしてるので)値をテキスト8に代入しなさい っていう意味の命令になります。
書けたら、VBEのウィンドウは閉じましょうか。

フォームを保存し、フォームビューに切り替えて、テストしてみてください。
コンボ6から選び出したら、テキスト8に郵便番号が入ります???




■リストボックスにしてみる

コンボボックスじゃなくて、別の表示方法がいいなぁ、という場合は、リストボックスにしてみてはどうでしょう。
コンボは簡単にリストボックスに変更できますし、基本的な構造はリストボックスもコンボボックスも同じなので、扱いやすいと思います。

コンボボックスを右クリックして、メニューをたどっていくと、リストボックスに変更できちゃいます。
コントロール名は「コンボ6」のままなんですけどね。まあ、これはこのままでいいでしょう。

書式プロパティを若干変更して、列幅を調節してみてください。2;4と入力すればOKですよ。

cmなんていう単位は自動的につきますからね。

で、さっき作った、「テキスト8に代入する処理」なんですけど、リストボックスに変更したらたぶんいらないと思うんで、動かないようにしましょう。
更新後処理欄の「イベントプロシージャ」という文字を削除して、空っぽにしてください。

ついでに、テキスト8も消しちゃっていいんじゃないかと思います。残しといてもいいけど、使わないテキストボックスが残ってるのも見栄え悪いですもんね。

で、フォームビューにしてみると・・・。
やってることはコンボボックスのときと変わらないんですけど、郵便番号と地区名が横に並んで出てきますね。
近々の地域の郵便番号を何箇所かいっぺんに調べたい場合は、コンボで選ぶより、リストボックスで一覧表示したほうがいいかもしれません。




 ■サブフォームにしてみる

リストボックスの部分を、サブフォームにしてもいいかもしれないですね。
サブフォームっていうか、クエリ作っといて、クエリの表示結果をデータシートビューで出すんでも、結構使えるんじゃないかと思います。
サブフォームの場合はすぐに切り替えるわけにはいかないので、手作業でいろいろと変えていかないとならないですけどね・・・。
やってみましょうか。

まずは、クエリを新規に作ります。
フォームは出しっぱなしにしておいたほうがいいので、画面の隅っこのほうにでも移動させておくといいでしょう。

クエリの内容は、よっつめのコンボの値集合ソースと同じような感じです。
まあ、考えてみれば、そうですよね。

つながりとしては、フォーム内のコンボボックスの内容が抽出条件になっているので、このフォームが開いてないと、結果を知ることができないクエリ、ということになります。なので、このフォーム、開いておいたままのほうが都合がいいんですよ。閉じちゃうと、クエリ作る分には問題ないですけど、開こうとすると「パラメータの入力」とかいう画面が出ちゃいますからね。

もちろん、コンボボックス名やフォーム名が間違ってても、クエリの結果は出ないです。

フォームがちゃんと開いていて、コンボやフォーム名を正しく書き込みさえすれば、クエリを開いても問題ないはず。

この時点で「パラメータの入力」という画面が出ちゃう人は、クエリの抽出条件をもう一度確認してください。

forms! が全角になってません?
フォーム名は正しい?コンボボックス名は正しい?


抽出条件自体は表示させる必要ないので、非表示にしといてもいいかもしれません。

なんか適当な名前を付けてクエリを保存します。
保存できたら、クエリは閉じちゃいましょう。

で、フォームをデザインビューにして・・・。
リストボックスは削除しちゃいましょう。


ツールボックスから、「埋め込みオブジェクト」ってボタンをクリックして、フォーム内の適当なところをクリックします。

なんか枠ができましたよね。私のは、「埋め込み10」っていう名前みたいです・・・変な名前。
で、この枠のプロパティを見てみてください。

ソースオブジェクトっていうところに、さっきのクエリ名を指定します。
入力するんじゃなくて、一覧から選んでくださいよ。

で、仕上げに、再クエリをしてやらないといけないですね。サブフォームだって同じですよ。
コンボ4の内容を、抽出条件にしてますからね。

既に、前に作ったイベントプロシージャが残ってるので、これを書き換えます。
更新後処理欄をクリックして、ビルドボタンをクリックしてください。

今までは「コンボ6」を再クエリするようにしてたんですけど、もう「コンボ6は削除しちゃってるし、、「埋め込み10」を再クエリするよう、書き換えてやりましょう。

と、こんな感じに↓なります。

データ量が多いときとか、検索した結果、地区名なんかを書き換えていかなくちゃならないときとかは、このスタイルがいいかもしれないですね。
もっとサブフォーム部分のデザインを工夫したい場合は、クエリじゃなくて、フォームを予め作っておいて、そのフォームを埋め込めばOKです。

え?コンボボックスがそろってないので気持ちが悪い?
自分で勝手にそろえてくださいっ!!!