RaiseEvent 語句

類別、表單或檔內的模組層級引發宣告的事件。

語法

RaiseEventeventname [ ( argumentlist ) ]

必要的 eventname模組 中宣告的事件名稱,並遵循基本變數命名慣例。

RaiseEvent語句語法包含下列部分:

部分 描述
eventname 此為必要動作。 要引發之事件的名稱。
argumentlist 選用。 以逗號分隔的變數、數組或運算式清單。 自變 量清單 必須以括弧括住。 如果沒有 自變量,則必須省略括弧。

註解

如果事件尚未在引發事件的模組內宣告,則會發生錯誤。 下列片段說明事件宣告和引發事件的程式。

' Declare an event at module level of a class module 
Event LogonCompleted (UserName as String) 
 
Sub 
 ' Raise the event. 
 RaiseEvent LogonCompleted ("AntoineJan") 
End Sub

如果事件沒有引數,在 事件的 RaiseEvent 叫用中包含空括弧,則會造成錯誤。 您無法使用 RaiseEvent 來引發模組中未明確宣告的事件。

例如,如果表單有Click事件,您就無法使用RaiseEvent引發其Click事件。 如果您在窗體模組中宣告Click事件,它會遮蔽表單本身的Click事件。 您仍然可以使用呼叫事件的一般語法來叫用表單的 Click 事件,但不能使用 RaiseEvent 語句來叫用。

事件引發是以建立連線的順序來完成。 因為事件可以有 ByRef 參數,所以延遲連接的進程可能會收到先前事件處理常式已變更的參數。

範例

下列範例會在最快速的 100 公尺競賽示範期間,使用事件來計算秒數。 此程式碼說明所有與事件相關的方法、屬性和語句,包括 RaiseEvent 語 句。

引發事件的類別是事件來源,而實作事件的類別則是接收。 事件來源可以有多個接收所產生的事件。 當類別引發 事件時,該事件會在已選擇為該物件實例接收事件的每個類別上引發。

此範例也會使用表單 (Form1) 搭配按鈕 () Command1 、標籤 () Label1 ,以及兩個文字方塊 (Text1Text2) 。 當您按一下按鈕時,第一個文字方塊會顯示 [從現在 ],而第二個文字方塊會開始計算秒數。 當完整時間 (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 支援與意見反應