Event 陳述式

宣告使用者定義的事件。

語法

[ Public ] 事件過程名稱 [ (arglist) ]

Event 語句包含下列部分:

部分 描述
Public 選用。 指定事件在整個項目中可見。 根據 預設,事件類型為 Public 。 請注意,事件只能在宣告事件的 模組 中引發。
procedurename 此為必要動作。 事件的名稱;遵循標準變數命名慣例。

arglist 引數具有下列語法和部分︰

[ ByVal | ByRef ] varname [ ( ) ] [ Astype ]

部分 描述
ByVal 選用。 表示自 變數以傳值方式傳遞。
ByRef 選用。 表示引數以傳參考方式傳遞。 ByRef 是 VBA 中的預設值,與 Visual Basic .NET 不同。
varname 此為必要動作。 代表要傳遞至 程式之自變數的變數名稱;遵循標準變數命名慣例。
type 選用。 傳遞至程式之自變數的數據類型;可能是 ByteBooleanIntegerLongCurrencySingleDoubleDecimal (目前不支援) 、DateString (變數長度僅) 、ObjectVariant使用者定義型別或對象類型。

註解

宣告事件之後,請使用 RaiseEvent 語句來引發事件。 如果 事件 宣告出現在 標準模組中,就會發生語法錯誤。 無法宣告事件以傳回值。 一般事件可能會宣告和引發,如下列片段所示。

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

注意事項

您可以宣告事件自變數,就像您執行程式自變數一樣,但下列例外狀況:事件不能有命名自變數、 選擇性 自變數或 ParamArray 自變數。 事件沒有傳回值。

範例

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

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

此範例也會使用表單 (Form1) 搭配按鈕 () Command1 、捲標 () Label1 ,以及兩個文本框 (Text1Text2) 。 當您按鍵時,第一個文字框會顯示 「從現在開始」,而第二個文本框會開始計算秒數。 當完整時間 (9.84 秒) 經過時,第一個文本框會顯示 “Until Now”,而第二個文本框會顯示 “9.84”。

程式代碼會指定表單的初始和終端狀態。 它也包含引發事件時所執行的程序代碼。

Option Explicit 
 
Private WithEvents mText As TimerState 
 
Private Sub Command1_Click() 
 Text1.Text = "From Now" 
 Text1.Refresh 
 Text2.Text = "0" 
 Text2.Refresh 
Call mText.TimerTask(9.84) 
End Sub 
 
Private Sub Form_Load() 
 Command1.Caption = "Click to Start Timer" 
 Text1.Text = "" 
 Text2.Text = "" 
 Label1.Caption = "The fastest 100 meter run took this long:" 
 Set mText = New TimerState 
 End Sub 
 
Private Sub mText_ChangeText() 
 Text1.Text = "Until Now" 
 Text2.Text = "9.84" 
End Sub 
 
Private Sub mText_UpdateTime(ByVal dblJump As Double) 
 Text2.Text = Str(Format(dblJump, "0")) 
 DoEvents 
End Sub

其餘程式代碼位於名為 TimerState 的類模組中。 Event 語句會宣告引發事件時所起始的程式。

Option Explicit 
Public Event UpdateTime(ByVal dblJump As Double)
Public Event ChangeText() 
 
Public Sub TimerTask(ByVal Duration As Double) 
 Dim dblStart As Double 
 Dim dblSecond As Double 
 Dim dblSoFar As Double 
 dblStart = Timer 
 dblSoFar = dblStart 
 
 Do While Timer < dblStart + Duration 
 If Timer - dblSoFar >= 1 Then 
 dblSoFar = dblSoFar + 1 
 RaiseEvent UpdateTime(Timer - dblStart) 
 End If 
 Loop 
 
 RaiseEvent ChangeText 
 
End Sub

另請參閱

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應