<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000--VBAの小屋>「イベント」に慣れる
   1 2 3 4 5



ちょっと横道にそれますが・・・皆さん、関数ってよく使いますよね。

Date関数とかMsgBox関数とか・・・。あれはいわばFunctionプロシージャなんですよ。
たとえば、Date()ってやると、今日の日付を返してくるじゃないですか。あれは、DateっていうFunctionプロシージャがAccessの中のどっかに作ってあって、Date()ってお呼びがかかったらシステムから今日の日付を取ってくる、という処理が書かれてるってことになります。
MsgBox()はメッセージボックスを出せ、という処理が書かれてるプロシージャってことですね。
その関数を動かすことによって、なんらかの回答を得ることができるようなプロシージャのこと、っていう意味・・・になります。

うーん、これだけじゃイマイチぴんとこないですよね。この違いは、いろいろ作りながら突き詰めていきましょうか。
とりあえずここでは、プロシージャの書き出し文、つまり1行目に、Subと書く場合とFunctionと書く場合とあるんだな、というくらいに捉えておいてください。

では、先頭のPrivateっていうのはなんなんでしょう。。。
Date関数とかMsgBox関数って、クエリとかマクロとかいろんなとこで使うことができますよね。
でも、前に作ったコマンド0_ClickってSubプロシージャ、あれを別のフォームとかクエリの中に書いても、動かないんです。
このフォームの中でしか識別されないプロシージャってことになるんですよ。それが、いわゆるPrivateっていうことなんです。
コマンド0_Clickっていう名前は、このフォーム固有のものなんですよ、っていう意味で、先頭にPrivateってつくんです。

プロシージャの書き出しの1行は、どういった種類のプロシージャであるかをあらわしてるんですね。

んじゃ、右端の()は???

これはもう、察しのよい方はもしかしたらお分かりかもわかりませんが・・・Date関数っていうのは、単に今日の日付を獲得するために使います。今日の日付は今日の日付ですよね。他に考えようがありません。でも、MsgBox関数ってどうでしょう。ただMsgBoxって打っても、何も出てきませんよね。どういうメッセージを載せたいのか、メッセージの種類は・・・など、いろいろ補助情報が必要になりますよね。っていうか、ないと関数実行できないですよね。

そんな感じで、プロシージャは、そのプロシージャを実行するときに必要となる補助情報を、実行するときにその都度書き添えることができるようになっています。それがプロシージャ名の右側についてるカッコの中身です。このカッコの中身のことを、「引数」って呼びます。必要のない場合もありますからそういう時は空っぽの状態にしておきます。あるいは、カッコ書かなくてもいい場合もあります。でもー・・・たいていは()って感じで、カッコだけ書きますね。Date()って感じで。。。
わたしたちがこれから作るプロシージャも、あらかじめAccessの中に用意されている関数類も、プロシージャという観点から見ると同じなんですよ。VBAを使うってことは、ああいうものを、VBAという言語を使って作るんだ、っていうことになります。



じゃ、もうちょっと練習してみましょう。
フォームのコマンドボタンとかテキストボックスって、プロパティの中の「可視」っていう欄の設定で「表示/非表示」が決まるんです。
ためしに、コマンドボタンの「可視」を「いいえ」にして、フォームビューに切り替えてみてください。
見えなくなるでしょう。

存在はしてるんですけど、見えないし、クリックできない・・・。そんな状態になるんですね。

んじゃ、またデザインビューに戻して・・・。コマンドボタンの「可視」もいちおう「はい」に戻しておいてください。

たとえば、このコマンドボタンを、表示させたり非表示にしたり、そんな切り替えをVBAで制御しようとしたら・・・。
ということを考えてみようと思います。

繰り返しになっちゃいますけど、どんな処理でも、「きっかけ」が必要なんです。イベント駆動型ですからね。この「きっかけ」を考えるのが難しいんですよ。
どういうタイミングでボタンを非表示にする?どういうタイミングで元に戻したらいい??
コレを考えないと、せっかくの配慮が返ってデータベースを使いにくくしてしまったりってことになりかねないんですね。

今回は・・・「トグルボタン」ってのを使ってみましょうか。↓

大きさとか位置はお好きなように変えてみてください。わたしのトグルボタンは「トグル4」っていう名前でした。みなさんのはどうでしょう?
今日は練習なんで、名前は変えないで「トグル4」のまま行こうと思います。
で、まだ何もやってないですけど、とりあえずフォームビューに切り替えてみましょう。





で、クリックしてみてください。1度クリックするとへこみ、もう一度クリックすると出っぱりますよね。
へっこんでるとき、コマンド0を非表示にしてみましょうか。
トグルボタンというのは、VBAから見ると、へっこんでるときがTrue、でっぱってるときがFalseとなります。ので、


もしトグル4がTrueなら
 コマンド0を非表示に
それ以外の場合は
 コマンド0を表示させる
もしもは終わり

っていう処理を、トグルボタンのクリック時か更新後処理か、その辺のイベントのトコに書いてやればいいんです。

具体的にどう書くか、ということはとりあえず置いておいて、ここまでの流れ、じっくり整頓しておいてください。

ここまで考えがまとまったら、後はどう書けばいいのか、細かい材料集めに奔走しましょう。

もし〜だったら、っていうのは、If文を使えばできそうですよね。
コマンド0がTrueなら、っていうのは、Trueっていうのは決り文句なんです。
特別ダブルコーテーションで囲んでとかややこしいことしなくてもちゃんとわかってくれるので、Me!コマンド0=True でわかってくれます。

後は、コマンド0を非表示に、ってとこですね・・・。
これもね、VBAだと意外と簡単に書けちゃうんですよ。

他のコーナーでもちょこちょこご紹介してますけど・・・フォームとか、レポートとか、フォーム内のコントロール各種のプロパティって、

 コントロール名.プロパティ名

という感じで、半角のドットで区切って記述してやるんです。
プロパティ名って、横文字の名前がちゃんとそれぞれついてて、VBAもちゃんとわかってくれるんです。
しかも!VBAのエディタなら、プロパティ名を一覧参照させてくれるんですよ。だからだいたいの綴りがわかってれば楽勝です。
さて、コマンドボタンとかテキストボックスの「可視」プロパティは、本名をVisibleといいます。

つまり、Me!コマンド0.Visible ということになります。で、これを「いいえ」にするわけですよね。「いいえ」はVBAの世界ではFalseと書きます

つまり、Me!コマンド0.Visible = false
となります。表示させたいときは
Me!コマンド0.Visible = True
ですね。
大文字小文字はどっちでもいいんで、半角全角だけ注意してください。

さあ、ここまで材料が整えば、もうできたも同然でしょう。
挑戦してみましょう!

わたしはこんな感じで、トグルボタンの「クリック時」のイベントのトコに書いてみました。
入力している最中、いろいろ補助機能が働いてくれると思います。そいつをうまく利用してくださいね。
Me!コマンド0の後に半角のドットを打つと、入力可能なプロパティ等々の一覧が出てきますよね。
一覧からVisibleを選ぶ場合は、↓↑キーで選択した後、Tabキーを押すといいでしょう。
また、一覧から選ばずにそのままVisibleと入力しても問題ナシのはず。失敗しても変なになっちゃっても今日はいいではありませんか。今日は練習ですから、とにかく雰囲気に慣れちゃってください。

処理の中身は、今回は別にうまく動かなくても失敗してもわけがわからなくても、最終的にはオッケーです。
とにかくつかんでいただきたいのが「トグルボタンをクリックしたらコマンドボタンの表示非表示を切り替える処理はどこに書けば?どう作り始めれば??」というところです。ここで迷子になっちゃって、「え?どうすればいいんだっけ」になっちゃうと、作業効率すごく落ちるし、何のためにVBAなんて使ってるのか意味がなくなっちゃいますもんね。

フォームをいちおう上書き保存して・・・。フォームビューに切り替えて試してみましょう。うまく動くかな?
トグルボタンを何回かクリックすると、コマンドボタンが消えたり出てきたりする様子、おわかりいただけると思います。