Chapter3-2 イベントとイベントプロシージャ

■イベントプロシージャとは
フォームなどのクラスモジュールと標準モジュールとのもっとも大きな違いは、クラスモジュールは「イベントプロシージャを記述できる」という点です。イベントプロシージャは、構文としてはふつうのSubプロシージャと同じです。しかし、その呼ばれ方が特別です。一般的なプロシージャから呼び出せないわけではありませんが、本来、Accessから(厳密にはWindowsからも)呼び出されるものです。

たとえば、フォーム上のボタンをクリックするという操作を考えてみます。ユーザーの操作からイベントプロシージャが実行されるまでの流れは、次のようなイメージになります。



■イベントプロシージャの作り方
イベントプロシージャは、次のいずれかの方法でその枠組みを作ります。枠組みができたら、その中にイベント発生時の処理を記述します。記述の仕方は一般的なプロシージャと変わりありません。
  1. オブジェクトの右クリックからコードビルダを起動する方法

    この方法では、フォームやコントロールごとの”デフォルトイベント”のプロシージャが生成されます。フォームであれば「読み込み時イベント」、コマンドボタンなら「クリック時イベント」がデフォルトのイベントです。







  2. プロパティシートからコードビルダを起動する方法

    まずプロパティシートの、生成したいイベント欄にカーソルを移動し、その右端にある[...]ボタンをクリックします。








  3. コードウィンドウの[オブジェクト]ボックスと[プロシージャ]ボックスから選択する方法

    まず、コードウィンドウの左上にある[オブジェクト]ボックスの一覧から、フォームや特定のコントロールなど、イベントプロシージャを作成する対象を選択します。この時点でデフォルトのイベントプロシージャが生成されます。もしそれ以外のイベントプロシージャ作るのであれば、続いて、その右の[プロシージャ]ボックスより、作成するイベントを選択します。

    ※デフォルトで作られたプロシージャは不要なら削除します(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

| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved