Event 陳述式
宣告使用者定義的事件。
語法
[ Public ] 事件過程名稱 [ (arglist) ]
Event 語句包含下列部分:
部分 | 描述 |
---|---|
Public | 選用。 指定事件在整個項目中可見。 根據 預設,事件類型為 Public 。 請注意,事件只能在宣告事件的 模組 中引發。 |
procedurename | 此為必要動作。 事件的名稱;遵循標準變數命名慣例。 |
arglist 引數具有下列語法和部分︰
[ ByVal | ByRef ] varname [ ( ) ] [ Astype ]
部分 | 描述 |
---|---|
ByVal | 選用。 表示自 變數 是 以傳值方式傳遞。 |
ByRef | 選用。 表示引數以傳參考方式傳遞。 ByRef 是 VBA 中的預設值,與 Visual Basic .NET 不同。 |
varname | 此為必要動作。 代表要傳遞至 程式之自變數的變數名稱;遵循標準變數命名慣例。 |
type | 選用。 傳遞至程式之自變數的數據類型;可能是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前不支援) 、Date、String (變數長度僅) 、Object、Variant、使用者定義型別或對象類型。 |
註解
宣告事件之後,請使用 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
,以及兩個文本框 (Text1
和 Text2
) 。 當您按鍵時,第一個文字框會顯示 「從現在開始」,而第二個文本框會開始計算秒數。 當完整時間 (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 支援與意見反應。