■イベントプロシージャとは
フォームなどのクラスモジュールと標準モジュールとのもっとも大きな違いは、クラスモジュールは「イベントプロシージャを記述できる」という点です。イベントプロシージャは、構文としてはふつうのSubプロシージャと同じです。しかし、その呼ばれ方が特別です。一般的なプロシージャから呼び出せないわけではありませんが、本来、Accessから(厳密にはWindowsからも)呼び出されるものです。
たとえば、フォーム上のボタンをクリックするという操作を考えてみます。ユーザーの操作からイベントプロシージャが実行されるまでの流れは、次のようなイメージになります。
■イベントプロシージャの作り方
イベントプロシージャは、次のいずれかの方法でその枠組みを作ります。枠組みができたら、その中にイベント発生時の処理を記述します。記述の仕方は一般的なプロシージャと変わりありません。
- オブジェクトの右クリックからコードビルダを起動する方法
この方法では、フォームやコントロールごとの”デフォルトイベント”のプロシージャが生成されます。フォームであれば「読み込み時イベント」、コマンドボタンなら「クリック時イベント」がデフォルトのイベントです。
- プロパティシートからコードビルダを起動する方法
まずプロパティシートの、生成したいイベント欄にカーソルを移動し、その右端にある[...]ボタンをクリックします。
- コードウィンドウの[オブジェクト]ボックスと[プロシージャ]ボックスから選択する方法
まず、コードウィンドウの左上にある[オブジェクト]ボックスの一覧から、フォームや特定のコントロールなど、イベントプロシージャを作成する対象を選択します。この時点でデフォルトのイベントプロシージャが生成されます。もしそれ以外のイベントプロシージャ作るのであれば、続いて、その右の[プロシージャ]ボックスより、作成するイベントを選択します。
※デフォルトで作られたプロシージャは不要なら削除します(VBEの[デバッグ]メニューの”コンパイル”でも自動的に削除できます)。
■イベントプロシージャの引数
生成されたイベントプロシージャは、所定の引数が自動的に付加されます。イベントプロシージャの引数は勝手に変更してはいけません。
また、この引数には2つの意味合いがあります。
- イベントに付随した情報の提供
たとえば、キーボードが押されたときに発生するイベント「キー入力時イベント」のプロシージャでは、どのキーが押されたかを示す値が引数として渡されます。
Private Sub テキスト1_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyA Then
MsgBox "Aキーが押されたました"
ElseIf KeyAscii = vbKeyB Then
MsgBox "Bキーが押されたました"
ElseIf KeyAscii = vbKeyC Then
MsgBox "Cキーが押されたました"
End If
End Sub
- イベントに対する応答
テキストボックスの内容が更新されようとしたときに発生する「更新前処理イベント」では、引数「Cancel」に”True”を代入することで、そのイベントをキャンセルし、更新を中止させるという応答を返すことができます。
Private Sub テキスト1_BeforeUpdate(Cancel As Integer)
If Len(テキスト1) < 5 Then
MsgBox "5文字以上入力してください!", vbOKOnly + vbExclamation
Cancel = True
End If
End Sub
|