Eventの概要
| カスタムイベントを定義し、特定の処理をトリガーする VBAの予約語 | ||
|
Event 概要 Event ステートメントは、VBAでカスタムイベントを定義し、オブジェクト内で特定の処理をトリガーするために使用されます。イベントは わかりやすく説明 プログラム内で発生させることができる独自のイベントを作る命令。 |
||
|
Eventを使った基本的なイベント定義
以下の例では、Event を使ってカスタムイベントを定義し、それを発生させる方法を示します。
' クラスモジュール(ClassModule1)内に記述
Public Event SampleEvent()
Public Sub TriggerEvent()
RaiseEvent SampleEvent
End Sub
解説:
Event SampleEvent()でカスタムイベントを定義。RaiseEvent SampleEventでイベントを発生させる。
Eventを使ったイベントの発生と処理
次に、標準モジュールでクラスのイベントを処理する例を示します。
' 標準モジュール(Module1)内に記述
Dim WithEvents obj As ClassModule1 ' イベントを受け取るため WithEvents を使用
Sub InitializeEvent()
Set obj = New ClassModule1
obj.TriggerEvent
End Sub
Private Sub obj_SampleEvent()
MsgBox "SampleEvent が発生しました!"
End Sub
解説:
Dim WithEvents obj As ClassModule1: イベントを受け取るため、WithEvents を使用してオブジェクトを宣言。obj.TriggerEventでRaiseEventを呼び出し、イベントを発生させる。obj_SampleEventでイベント発生時の処理を記述。
Eventを使ったExcel VBAでの活用
Excelのセルの変更を検知し、特定の処理を行う例です。
' ワークシートモジュール(Sheet1)内に記述
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "セル " & Target.Address & " の値が変更されました!"
End Sub
解説:
- セルの値が変更されると
Worksheet_Changeイベントが発生。 - 変更されたセルのアドレスをメッセージボックスで表示。
Eventの注意事項
- Event はクラスモジュールでのみ使用可能: 標準モジュールでは定義できない。
- イベントを受け取るには WithEvents を使用する: 標準モジュールでイベントを受信するには
WithEventsを使う必要がある。 - イベントの発生は RaiseEvent で行う:
RaiseEventを使わないと、定義したイベントは発生しない。
よくある質問
- Q: イベントを標準モジュールで定義できますか?
- A: いいえ。Event ステートメントはクラスモジュール内でのみ使用できます。
- Q: WithEvents を使わずにイベントを受信できますか?
- A: いいえ。イベントを受信するオブジェクトは
WithEventsで宣言する必要があります。 - Q: RaiseEvent の代わりに直接メソッドを呼び出せませんか?
- A: 可能ですが、イベントを使用することで、処理を柔軟に拡張できるメリットがあります。
まとめ
- Event はカスタムイベントを定義するためのステートメント。
- イベントを発生させるには
RaiseEventを使用する。 - イベントを受信するには
WithEventsを使ってオブジェクトを宣言する必要がある。 - Excel VBAの自動処理やカスタム通知機能に活用できる。