RaiseEvent ステートメント
モジュール レベルで宣言したイベントをクラス、フォーム、またはドキュメント内で発生させます。
構文
RaiseEventeventname [ ( argumentlist ) ]
必須の eventname は、モジュール内で宣言されたイベントの名前です。この名前は Basic 変数の名前付け規則に従います。
RaiseEvent ステートメントの構文には、次の指定項目があります。
指定項目 | 説明 |
---|---|
eventname | 必須。 開始するイベントの名前。 |
argumentlist | 省略可能。 変数、配列、または式のコンマ区切りリストです。 argumentlist は、かっこで囲む必要があります。 引数がない場合は、かっこを省略する必要があります。 |
注釈
イベントが発生したモジュール内で、そのイベントが宣言されていない場合は、エラーが発生します。 次のフラグメントは、イベントの宣言と、そのイベントが発生するプロシージャを示しています。
' Declare an event at module level of a class module
Event LogonCompleted (UserName as String)
Sub Demo()
' Raise the event.
RaiseEvent LogonCompleted ("AntoineJan")
End Sub
イベントに引数がない場合は、イベントの RaiseEvent 呼び出しに空のかっこを含めるとエラーが発生します。 モジュール内で明示的に宣言されていないイベントは、RaiseEvent を使用して開始することはできません。
たとえば、フォームに Click イベントがある場合は、RaiseEvent を使用して Click イベントを開始することはできません。 フォーム モジュールで Click イベントを宣言すると、フォーム自体の Click イベントはシャドウされます。 フォームの Click イベントは、そのイベントを呼び出すための標準の構文を使用することで引き続き呼び出すことができますが、RaiseEvent ステートメントを使用して呼び出すことはできません。
イベントは、接続が確立された順番で発生します。 イベントには ByRef パラメーターを指定できるため、以前のイベント ハンドラーで変更されたパラメーターを、その後で接続するプロセスが受け取る可能性があります。
例
次の例では、イベントを使用して、最速の 100 メートル走のデモ中にイベントを使用してタイムをカウントします。 コードではイベントに関連するすべてのメソッド、プロパティ、およびステートメントを示しています (RaiseEvent ステートメントを含む)。
イベントを発生させるクラスはイベント ソース、イベントを実装するクラスはシンクです。 イベント ソースには、生成されたイベントに対して複数のシンクを指定できます。 クラスがイベントを発生させると、そのイベントはすべてのクラス (オブジェクトのインスタンスに対してイベントをシンクするために選択したクラス) で開始されます。
また、この例では、ボタン (Command1
)、ラベル (Label1
)、および 2 つのテキスト ボックス (Text1
と Text2
) を含むフォーム (Form1
) を使用しています。 ボタンをクリックすると、1 番目のテキスト ボックスに From Now と表示され、2 番目のテキスト ボックスで秒数のカウントが始まります。 フルタイム (9.58 秒) が経過すると、1 番目のテキスト ボックスに Until Now と表示され、2 番目のテキスト ボックスに 9.58 と表示されます。
コードでは、フォームの初期状態と最終状態を指定しています。 また、イベントの発生時に実行されるコードも含まれます。
Option Explicit
Private WithEvents ts As TimerState
Private Const FinalTime As Double = 9.58
Private Sub UserForm_Initialize()
Command1.Caption = "Click to start timer"
Text1.Text = vbNullString
Text2.Text = vbNullString
Label1.Caption = "The fastest 100 meters ever run took this long:"
Set ts = New TimerState
End Sub
Private Sub Command1_Click()
Text1.Text = "From Now"
Text2.Text = "0"
ts.TimerTask FinalTime
End Sub
Private Sub ts_UpdateElapsedTime(ByVal elapsedTime As Double)
Text2.Text = CStr(Format(elapsedTime, "0.00"))
End Sub
Private Sub ts_DisplayFinalTime()
Text1.Text = "Until now"
Text2.Text = CStr(FinalTime)
End Sub
残りのコードは、TimerState という名前のクラス モジュールにあります。 このモジュールのコマンドには Raise Event ステートメントが含まれます。
Option Explicit
Public Event UpdateElapsedTime(ByVal elapsedTime As Double)
Public Event DisplayFinalTime()
Private Const delta As Double = 0.01
Public Sub TimerTask(ByVal duration As Double)
Dim startTime As Double
startTime = Timer
Dim timeElapsedSoFar As Double
timeElapsedSoFar = startTime
Do While Timer < startTime + duration
If Timer - timeElapsedSoFar >= delta Then
timeElapsedSoFar = timeElapsedSoFar + delta
RaiseEvent UpdateElapsedTime(Timer - startTime)
DoEvents
End If
Loop
RaiseEvent DisplayFinalTime
End Sub
関連項目
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。