共用方式為


Event 陳述式

宣告一個使用者定義事件。

語法

[ 公開 ] 事件程序名稱 [ (arglist) ]

事件陳述包含以下部分:

部分 描述
Public 選用。 指定 事件整個專案中都可見。 事件 類型預設為 公開 。 請注意,事件只能在宣告的 模組 中提出。
程序名稱 此為必要動作。 活動名稱;遵循標準變數命名規則。

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

[ ByVal | 參考文獻]varname [ ( ) ] [ 類型 ]

部分 描述
ByVal 選用。 表示 參數以值傳遞的。
ByRef 選用。 表示引數以傳參考方式傳遞。 ByRef 是 VBA 的預設,與 Visual Basic .NET 不同。
varname 此為必要動作。 代表傳遞給 程序的參數變數名稱;遵循標準變數命名規則。
type 選用。 傳遞給程序的參數資料型態;可能包括位元組布林、整數貨幣雙、十 (進位(目前不支援) )、日期字串 (僅可變長度的) 、物件變體、使用者定義型態或物件型態。

註解

事件宣告後,使用 RaiseEvent 陳述式來觸發事件。 若在標準模組中出現事件宣告,則會發生語法錯誤。 事件無法宣告回傳值。 一個典型事件可能會被宣告並提出,如以下片段所示。

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

注意事項

你可以像宣告程序參數一樣宣告事件參數,但有以下例外:事件不能有命名參數、 可選 參數或 參數陣列 參數。 事件沒有回報價值。

範例

以下範例利用各種事件來計秒,示範最快100公尺賽跑。 程式碼說明了所有與事件相關的方法、屬性與語句,包括 事件 語句。

提出事件的類別是事件來源,實作事件的類別是 sink。 一個事件來源可以有多個匯(sink)來處理其所產生的事件。 當類別提出事件時,該事件會對每個選擇為該物件事件沉沒的類別觸發。

範例中也使用表單 (Form1) ,包含) 按鈕 (Command1 、) (Label1 標籤,以及兩個文字框 (Text1Text2) 。 點擊按鈕後,第一個文字框顯示「從現在開始」,第二個開始計時。 當完整時間 (9.84秒) 過時,第一個文字框顯示「直到現在」,第二個顯示「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 的類別模組中。 事件陳述式宣告事件被觸發時啟動的程序。

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 支援與意見反應