<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
  Ac2002--VBAの沼 > 検索画面を作ってみる
   1 2



検索画面を作ってみる

ここまでのところ、いかがでしょう?ここまでのところ、いかがでしょう?
え?簡単すぎるのであんまり読まなかった?ほうほう、それは頼もしいですぞ。そうこなくっちゃ。

今回は、ここまでの操作で習得していただいたことを活用して、ちょっとしたdbを作ってみようかなと思います。
いろいろ思い出しながら挑戦してみてください。
こんなのを作る予定です。↓




うちの会社、いろんな商品を扱ってるんですけどね。

商品の種類が結構増えてきたもんで、「商品情報を検索できるような画面がほしいなぁ」って思ってたとこだったんです。
単にテーブルの情報をパパーッと表示する表形式のフォームがあるだけでも、別にいいんですけどね。
データシートビューでも、ツールボタンで「検索」くらいのことならできるんだし。。。

でも、せっかくだから、かっこいい検索画面みたいなのを作ってみようかなと思うんですよ。
分類ごとに、担当者も需要も別れるので、「分類」別に表示の切り替えができたらいいなぁと思ってるんです。

「検索画面を作る」と一口に言っても、いろんなやり方がありますよね。
今回は、今まで習得いただいた方法をうまく活用した「検索画面」の作り方、ということで、お話をしていきます。
検索画面の作り方よりも、今までお話してきたことを活用する方が、比重が大きめのコーナーだと思ってください。

材料としては、
  ・イベント
  ・プロパティ
  ・Select Case

  ・そしてひそかに値の代入

こんな材料を使います。
後は、クエリを少々、下ごしらえとした作ります。クエリ作り方わかんないなんていう人はいませんよね?
んでは始めますよ〜



■表形式のフォームを作る

まず土台となるフォームを作ります。
オートフォーム表形式機能を使ってさくっと作っといてください。

そのままじゃちと使い勝手が悪いので、テキストボックスの位置や大きさなどを調節しておいてください。
といっても、今日はフォーム作りそのものはメインじゃないので、適当でいいです。
調節できたら、フォームヘッダ部分を少し広げて、ラベルを下方向にちょっとずつ移動させ、上のほうに隙間を少しあけておきましょう。

このフォームに名前を付けて保存します。
名前は何でもいいですが、なんてつけたかわからなくなっちゃうのはタブーですよ。

できましたですか???

VBAとは全然違う話になっちゃうんですが、ちょっと余談話・・・。
上の図の○しるしつけたところ、「なんか変な表示が!!!おかしくなった!!!」って、思わないでくださいよ・・・。
これ、スクロールバーです。
テーブルのフィールドサイズ等々のからみで、オートフォーム機能を使ったフォームの場合自動的にスクロールバーが表示される場合があります。
自動的についてしまった設定は、「なし」にすればいいだけのことです。



■クエリを作る

ウチの取り扱い製品は、武器、防具、アクセサリー、消耗品の4種類です。
たまにわけのわかんない製品が紛れ込んでくることもあるので・・・武器、防具、アクセサリー、消耗品、その他 の5種類、ということになります。
そうすると、一覧表のパターンとしては、

   武器
   防具
   アクセサリー
   消耗品
   その他
   全部

の6種類ということになりそうです。

今回は、「Select case」 と、「プロパティへの値の代入」のおさらいをする目的があります。
そのための材料として、上記6パターンの結果を出す6種類のクエリを作ります。
6種類といっても、最後の「全部」は、テーブルそのものを表示すればいいので、作るのは5つですね。

では、
   ・全フィールド表示
   ・「分類」で抽出

するクエリを、5つ、作ってください。



「その他」は、抽出条件がちょっと難しいですね。
データの入力をしてくれる人が「その他」と文字を入力してくれていれば抽出の使用がありますが、「お菓子」とか「くだもの」とか入力されてる場合とか、どうしたらいいんでしょう。

こういう場合は、抽出条件欄に

  Not In ("武器","防具","アクセサリー","消耗品")

こう書いておいてください。
これで、「武器、防具、アクセサリー、消耗品以外」という意味になります。



5つ、できました?

ひとつずつ開いて、確認しておいてくださいね。



■オプショングループを作る

フォームに戻りまして、先ほど隙間をあけたヘッダー部分に「フレーム」を作りましょう。

大きさや位置は後で調節しますんで、とにかく適当に作ってください。

どうやら、「フレーム10」という名前のフレームができたみたいだな・・・。皆さんのはなんて名前になりました?
いちおう、プロパティを見て調べておいてください。
続いて、フレームの中に「オプションボタン」を6つ作ります。

ちょっとせまっちいですが、各ラベルに、「武器」「防具」「アクセサリー」「消耗品」「その他」「全部」と入力していきます。
場所が狭かったら、ヘッダーをもうちょっと広げて、フレームの大きさを調節してください。

ふう・・・わたしはこんな感じに仕上げました↓。

ちょっとだけフォームビューに切り替えて様子を見てみましょう。

オプションボタンをクリックしてみてください↑。
フレームの中で、オンになるオプションボタンはひとつだけで、あとのは全部オフになると思います。

フレームの中に、オプションボタン/チェックボックス/トグルボタンといったような部品をいくつか作ると、そのひとつひとつに「オプション値」という番号が割り振られます。
各オプションボタンのプロパティを見てみてください。

6つのオプションボタンそれぞれ、1から6までの数字が割り当てられていると思います。
つまり、「防具」のオプションボタンをクリックしたということは、「フレーム10が2である」という意味になるのです。

これをうまく使って、このフォームが表示するべきテーブル(クエリ)を入れ替えしてやろう、というわけです。



■コードを書く

フォームに表示されるデータを左右するのは、フォームの「レコードソース」というプロパティです。
これを変えると、このフォームには別の情報が表示されることになります。

ただし、各テキストボックスとフィールド名も、個々に結びついています。
全然関係ないテーブルとかクエリに変えると、各テキストボックスの中身がエラーになってしまいますよね。
だから、さっき作ったクエリも、テーブルの全フィールドを表示するようにしたわけです。

この「レコードソース」プロパティをヘルプで調べておきましょう。
RecordSourceというのが、このプロパティの正式名称みたいですね。
んじゃあ、VBAでは、

   Me. RecordSource = “テーブルまたはクエリ名”

と書けば、レコードソースの入れ替えができるのかな。
テーブルまたはクエリ名は、ダブルコーテーションで囲みます。
ヘルプに、「Visual Basic でこのプロパティを設定するには、文字列式を使います。」って書いてありますでしょう。
「文字列式」って書いてあったら、たいていそれは、「ダブルコーテーションで囲む」ってことなんです。
まー、日本語ってほんとに、堅苦しくて難しいですよね。。。



今までのところを整理してみると、例えば、

Select case me!フレーム10
 Case 1
     Me. RecordSource = “武器だけ抽出するクエリ”
 Case 2
     Me. RecordSource = “防具だけ抽出するクエリ”
 Case 3
     Me. RecordSource = “アクセサリーだけ抽出するクエリ”
 Case 4
     Me. RecordSource = “消耗品だけ抽出するクエリ”
 Case 5
     Me. RecordSource = “その他のクエリ”
 Case 6
     Me. RecordSource = “商品マスタのテーブル”
End Select

と、まあ、こんな感じになりそうですね。
Case 1とか2とかいう数字は、いわゆる「オプション値」のことです。
だから、どのオプションボタンのオプション値が何番か、ちゃんとチェックしておかないとならないのです。

後は、上記のようなプロシージャを作るとして、どういうタイミングで動かすか・・・ということを考えないといけません。
これは、おそらく、フレーム内のどっかをクリックしたときに動くようにしておけば間違いないんじゃないかと思うんですよね。
コマンドボタン作ってもいいんですけど・・・普通に考えて、こういうオプションボタンが並んでたら、クリックすればいいだけのような気がしません???

そこで・・・。
フレームのプロパティを出します。ちょっと出しにくいかもしれませんが、うまいことクリックしてフレームを選んでください。

んでは、クリック時のイベントを作るといたしましょう。
ここから先は、皆さんOKですよね。いろいろ思い出しつつ、挑戦してみてください。



できたら、いちおうコンパイルして、VBEのウィンドウを閉じましょうか。
フォームも、保存しつついったん閉じて、一息入れましょう。

気持ちも新たに、では、フォームを開いて・・・。

フレームからどれかひとつオプションボタンをクリックしてみてください。
表示が変わります???

6つとも、繰り返し何回もクリックしてみてくださいね。
こうすると、クエリを入れ替えているだけなんですけど、あたかも「絞り込んでる」みたいでしょう???

わたしは、こんな感じのコードになりました。

ポイントは、クエリ名とフレームのオプション値の二つです。
うまく動かなかった場合は、その2点をもう一度確認してみてください。