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



まずは、フォームのイベントとVBAの関係、それと、VBAで何か処理を作るために使うエディタの基本的な使い方のところ、オッケーでしょうか?

操作を覚える、というより、とにかく雰囲気をつかんじゃってくださいね。

フォームがあって、フォーム上にテキストボックスとかコマンドボタンとかいろいろ作るとします。そのフォームの後ろには、VBAを使って処理を作ることができる環境があって、専用のエディタを使うことができます。VBAの世界では「何かをしたとき、何かが動く」という感じの処理の作り方になります。フォームを開いたとき、フォームを閉じたとき、次のレコードに移動したとき、コマンドボタンをクリックしたとき、テキストボックスに何か入力したとき・・・。これらのタイミングで、何がしかの処理を動かすようなしくみになっています。こういうのを「イベント駆動型」または「イベントドリブン型」の処理、といいます。

フォームやコマンドボタン、テキストボックスなどには必ず、「イベントプロパティ」というものがいくつか用意されています。

フォームの後ろにはいつも、↓コードを書くことができるエディタが潜んでいて、プロパティと仲良くしている・・・のです。


わたしたちはVBAで処理を作るとき、「何を」「どうしたとき」「どうする」という3つの事柄を考えなくてはイケマセン。
どうしても、VBAの記述そのものに目が行きがちで、「どうする」の部分の書き方ばかり気になってしまいますけれど、「何を」「どうしたとき」の部分もすごく大切なんです。その辺も少しずつ理解を深めていってください。

VBAでは、何か開いたりクリックしたりしたときに動く処理1つを「プロシージャ」と呼んでいます。
この例だと、コマンド0_Clickという名前のプロシージャと、テキスト1_AfterUpdateというプロシージャがあることになります。
プロシージャという言葉は、プログラム開発の世界で広く使われている言葉です。コンピュータ内部で、ひとつの処理を実行するための命令のまとまりをこう呼びます。

今回の例だと、
Private SubからEnd Subの間に書かれていることが(この2行も含めて)ひとつのプロシージャということになりますね。コンピュータ内部でこういう言い回しをしているだけなので、「プロシージャって何だっけ?」ということはあまり意識しないほうがいいのかもしれませんけれど・・・。まあ、とりあえず、VBAのエディタ上で見たときの「ひとまとめ」をプロシージャと呼ぶのだと思っていてください。



で、プロシージャにはちゃんと「名前」がついてます。今回の場合は、Accessが勝手につけた名前になってますね。
コマンド0という名前のコマンドボタンをクリックしたときに動くプロシージャだから、コマンド0_Clickってついてます。

フォーム内のイベントからプロシージャを作るときは、自分でプロシージャの名前を付けることはありませんから、名前がついてるな・・・というくらいに思っていてください。
このプロシージャを作ってから、コマンドボタンの名前を変更すると、プロシージャ名とイベントが結びつかなくなってしまいます。こういうのがイマイチわかりにくい部分なんですけど、とにかくコマンドボタンとかテキストボックスとかフォームとかの「名前」ってすっごく重要なものなんだ、ってことを承知しておいてくださいね。

うしろにからっぽのカッコがついてますけど、これなんでしょうね。
あと、Private Subって、どういう意味なんでしょう。
じゃ、その辺考えてみましょう。

プロシージャというのはごくごく一般的に言って、コンピュータの中での処理のひとつまとまりのことです。で、VBAの世界では種類が2つあります。

FunctionプロシージャとSubプロシージャです。

上のはSubプロシージャみたいですね。

どうちがうのか、というとこ、まずはヘルプからパクってきました。

Subプロシージャは、操作を実行しますが、値を返しません。独自のSubプロシージャを作成することも、Accessによって作成されたイベントプロシージャのテンプレートを使うことも可能です。
Functionプロシージャは、通常では関数と呼ばれ、計算結果などの値を返します。Visual Basicには、現在の日時を返すNow関数など、多くの組み込み関数があります。これらの組み込み関数に加え、独自の関数を作成することができます。



・・・。
なんか難しそうですね・・・。

プロシージャというものは、なんかしら処理をしてなんかしら結果を出すわけで、わたしたちから見ると別にどれも違いはないんですけど、コンピュータの側から見ると2種類に分けられるんです。

何かしらアクションを取るプロシージャ(フォームを開くとかレポートを開くとかメッセージを出すとかどっかのテーブルから値をとってくるとか)
何かしら値を出すプロシージャ(計算した結果を出すとか)


一見、どこが違うのかイマイチわからないですけど、コンピュータからするととてもとても違うらしいんですね。
なので、前者をSub、後者をFunctionと書くことで、働き方が変わってくるというわけなんです。