每個事件處理程序必須存放在特定類型的代碼模塊中。工作簿級別事件的代碼應該放在ThisWorkbook代碼模塊中,工作表級別事件的代碼應該放在特定工作表的代碼模塊中(例如,命名為Sheet1的代碼模塊)。
此外,每個事件處理程序都有預先確定的名稱??梢酝ㄟ^鍵入名稱來聲明過程,但是更好的方法是讓VB編輯器做這項工作。如圖顯示了ThisWorkbook對象的代碼模塊。要插入過程聲明,從左側的對象列表中選擇Workbook。然后從右側的程序列表中選擇事件。完成上述工作時,就得到了包含過程聲明行和End Sub語旬的過程“shell”
例如,如果從對象列表中選擇了“Workbook”,從程序列表中選擇了Open,則“VB編輯器”將插入下列(空)過程代碼:
Private Sub Workbook Open()
End Sub
事件處理程序的VBA代碼將置于上述兩行之間。
一些事件處理程序包括參數列表。例如,您可能需要創建事件處理程序來監控工作簿的SheetActivate事件。如果使用前面部分討論的技術,VB編輯器將創建以下事件過程:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
End Sub
該過程使用了一個參數(Sh),它代表了激活的表。在這種情況下,Sh被聲明為。object數據類型而非Worksheet 數據類型,因為被激活的表也可能是一個圖表。
當然,代碼也可利用信息作為一個參數進行傳遞。下面的例子就是通過訪問參數的Name屬性,來顯示被激活表的名稱。參數成為Worksheet對象或是Chart對象。
private Sub Workbook_SheetActivate(ByVal Sh As Object)
MsgBox Sh.Name & " was activated."
End Sub
一些事件處理程序使用被命名為Cancel的“布爾”參數。例如,工作簿的BeforePrint事件的聲明如下:
private Sub Workbook BeforePrint(Cancel As Boolean)
傳遞給過程的Cancel值為False。然而,代碼可將Cancel的值設為True,這就取消了打印。下面的例子對此進行了演示:
Private Sub Workbook BeforePrint(Cancel As Boolean)
Msg= "Have you loaded the 5164 label stock? "
Ans=MsgBox(Msg,vbYesNo, "About to print…" )
If Ans =vbNo Then Cancel= True
End Sub
這個Workbook BeforePrint過程在打印工作簿之前執行。此過程將顯示一個消息框,詢問用戶是否確認裝載了正確的標簽系列。如果單擊No按鈕,則Cancel將被設為True,不進行打印工作。