RaiseEvent 語句
語法
RaiseEventeventname [ ( argumentlist ) ]
必要的 eventname 是 模組 內宣告的事件名稱,並遵循基本變數命名慣例。
RaiseEvent 語句語法包含下列部分:
部分 | 描述 |
---|---|
eventname | 此為必要動作。 要引發之事件的名稱。 |
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 語 句。
引發事件的類別是事件來源,而實作事件的類別則是接收。 事件來源可以有多個接收所產生的事件。 當類別引發 事件時,該事件會在已選擇為該物件實例接收事件的每個類別上引發。
此範例也會使用表單 (Form1
) 搭配按鈕 () Command1
、捲標 () Label1
,以及兩個文本框 (Text1
和 Text2
) 。 當您按鍵時,第一個文字框會顯示 [從現在 ],而第二個文本框會開始計算秒數。 當完整時間 (9.58 秒) 經過時,第一個文本框會顯示 [直到現在] ,而第二個文本框會顯示 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 事件 語句。
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 支援與意見反應。