![]() |
||
<HOME <お願い事項 <Access2000 TOP <Access97 TOP <サイト内検索 | ![]() |
|
![]() |
||
Ac2002--VBAの沼 > 検索画面を作ってみる | ||
1 2 |
このやり方、クエリを5つも作らないといけないし、なんかとっても非効率な感じがして嫌う人もいるんです。
こういうフォームを作る場合、SQL組んだり、フィルタ機能を使って絞り込んだりしている人の方が、多いかもしれません。
でも、わたしは、この「クエリをいくつも作って切り替える方法」、よく使います。
もちろん、絞込み条件が20も30もある場合はそぐわないですけど、今回みたいに4〜5種類で、しかも「フレーム」使う場合って、条件が早々増えない場合が多いじゃないですか。
そういうときは、この方法、結構重宝すると思うんですよね。他の人が見てもわかりやすいし。
■並べ替え
では、このフォーム、もう少し工夫をしてみましょうか。
「値段の高い順に並べ替えたい!」とか、条件をプラスしたいときは、こんなやり方はどうでしょう。
フォームのプロパティの中に、「並べ替え」っていうプロパティがあるんですよ。
これを活用してみようかな、って思います。
例えば・・・。トグルボタンをフォームヘッダーの右端の方に作っておいて、
このトグルボタンのクリック時のイベントとして、こんなコードを書きます。
Trueっていうのは、VBAの世界では「はい」のことです。「Yes」と同じですね。
なんかね、素直に「はい」って表現しないで「真」っていう言葉を使いたがるんですよね。VBAの世界って。
逆に、「いいえ」は「偽」という意味の「False」という単語を使います。
なので、Trueを代入するということは、「はい」と代入したのと同じことなんですよ。
そのほか、コード全体の意味は・・・ここはひとつ、皆さんご自身で解析してみてください。
決して難しい内容ではないですよね。
記号の使い方や細かい書き方は、少しずつお話していきます。
また、細かい書き方については、MS-Accessのバージョンによっても微妙に変わってきているので、ヘルプを見ただけでなく実際に実験してみないとわからないこともいろいろあるんです。
■追加の許可
さらにもう一工夫・・・。
これ、「その他」って選ぶと、今のところ該当レコードが1件もないから1件も出ないはずなんですが、1行、空白行が出ますよね。
他の分類を選んだ場合でも、一番下の方にスクロールしていくと、最後の行は必ず空白行のはずです。
なんで空白行が出てくるのか分からない人はいないと思いますが・・・。
これを調節する処理を、作ってみようと思います。
この空白行は、フォームのプロパティで調節するものですよね。「追加の許可」というプロパティです。
普段は、単に商品情報を見るだけなので、新規にレコード追加をするためのこの行は表示されてない方がいいんです。
だから、「いいえ」にしちゃおうかなと思います。
そうすると、空白行は出てこなくなります。
このフォームが、「商品情報を見るためだけのフォーム」ならこれでいいんですが、データの追加をちょこっとしたいときもあるんだよな・・・という場合は・・・。
そしたら、何かボタンをクリックしたとかそういうタイミングで、上記プロパティを「はい」に変更してやればよさそうなもんですよね。
やってみましょうか。プロパティ名が確認できれば、後は今までやってきた操作と段取りは同じです。
まあ、しいて言えば、イベントを起こすタイミングなどを考えるだけですよね。そうだな・・・。
トグルボタンを使ってみようかな。
このトグルボタンをクリックしたときのイベントを作ります。
とりあえず、こんなんでどうでしょう。
トグルボタンをクリックしてみると、
出ます?
一応、レコード移動ボタンの「新規レコード追加」ボタンがどうなっているか、変化を確認してくださいね。
でも、他の分類だと、既に何十件もデータが入っているので、一番最後に「新規入力行」が出ても、変化がわからないですよね・・・。
一応コレでも、「新規入力行」が一番下に出てるはずなんですけどね・・・↑
じゃあ・・・。
別のプロパティを活用してみましょうか。
もうひとつ「データ入力用」っていうプロパティがあるんですよね。
コレを「はい」にすると、新規レコード入力のみを受け付けるフォームになります。
「追加の許可」といっしょにこれも「はい」にしてみましょう。
これで、けっこうイケるんじゃないかと思います。
■自動的に番号を振る
これは、今回の内容としてはオマケです。
この話をじっくりやろうとすると、それだけで1コーナー成立しちゃうくらいのボリュームになるので、今回は簡単に。。。。
あまり細かいことはお話してませんが、基本的なことはお話できると思います。
後関数の用法などはヘルプで調べながら進めて、ご自身で応用してみてください。
「商品マスタ」テーブルの「商品番号」というフィールドは、テキスト型で、6桁の数字による番号を付けています。
商品名を入力した時に、下図のように自動的に番号がつくようにしてみようと思います。
この動きを実現させているコードは、以下の通りです。
イベントの起きるタイミングは、フォームの「挿入前処理」というイベントでやってみました。
書いたコードは1行だけです。
Format関数と、DMax関数という関数を組み合わせて、「テーブルの中の一番大きな番号に1を足した番号」を6桁表示にしています。
Format関数ってこういう使い方もできるんですね。書式を整えるための関数ですので、利用範囲は非常に広いんです。
■余談
余談ですが・・・。
ああっ!入力した商品名が、消えた!!!
・・・なんていう方は・・・いらっしゃらないですよね・・・。
もし、消えたように見えたのであれば、商品名のテキストボックスのプロパティを確認してください。
このプロパティが、↑こうなってないですか???
オートフォーム機能などでフォームを作った場合で、スクロールバーが出てしまうってケース、ちょっと前にお話しましたよね。
そういうテキストボックスは、多分このプロパティもこうなってると思います。
Enterキーを押すと、次のフィールドにカーソル移動するのではなく、このテキストボックスの中で改行するのです。
決して入力したものが消えたわけではないので、慌てず各プロパティをチェックしてみてください。
VBAでいろいろコードを書いていると、何か不可解なことが起こったとき「VBAでコードを書いたからか???」って、すぐにそっち疑いがちになってしまいます。もちろん、コードの書き方に問題がある場合もありますが、特にVBAとは関係ないことが要因だったりもします。問題なのは「VBAのせいだと思い込んでしまって問題点が見えなくなってしまう」こと。これは十分に気をつけなくてはいけません。そんな迷路に陥らないためにも、フォームやテーブルなど各オブジェクトについて十分に理解を深めて、問題の切り分けができるようになっていってくださいね。
この章で作成したDBをご用意しました>コチラ
「並べ替え」のところをちょっとだけ工夫してますが、後はここでお話したのと同じ段取りで作ったものです。
多分、問題ないと思いますけれども、「同じようにできないようそつき!!!」と思われた方がおられたら、どうぞ覗いていってくださいませ。
![]() |
![]() |
![]() |