本文詳細講解Workbook物件常用的兩個事件:Open事件和BeforeClose事件。
Workbook_Open事件
當打開工作簿時發生Workbook_Open事件。
在ThisWorkbook代碼模組中輸入下面的代碼, 使工作簿打開時彈出一個訊息方塊:
Private Sub Workbook_Open()
MsgBox "歡迎來到[完美Excel]微信公從號!"
End Sub
在打開工作簿時, 彈出如圖1所示的訊息方塊。
圖1
Workbook_BeforeClose事件
在關閉工作簿之前發生該事件。 如果修改了工作簿但沒有保存修改, 那麼該事件發生在詢問用戶保存修改之前。
其語法為:
Workbook_BeforeClose(Cancel As Boolean)
說明:
參數Cancel為布林值, 必需。 事件發生時為False;如果事件程序將此參數設置為True, 則停止關閉工作簿並且工作簿保持打開狀態。
下面的代碼在關閉工作簿時總是會保存對該工作簿的修改,
Private SubWorkbook_BeforeClose(Cancel As Boolean)
If Me.Saved = False Then Me.Save
End Sub
Workbook_Open事件可用於在打開工作簿時初始化工作簿, 設置計算模式、設置螢幕、添加自訂功能表、為工作表中的下拉式列示方塊或清單方塊添加資料。 Workbook_BeforeClose事件可用於恢復工作簿的初始設置、阻止用戶關閉工作簿, 等等。
示例1:設定特定用戶才能操作工作表
下面的代碼在打開工作簿時檢查用戶名是否為“完美Excel”, 如果不是, 則保護工作表, 防止其他用戶對其進行修改。
Private Sub Workbook_Open()
Dim wks As Worksheet
If Application.UserName <> "完美Excel" Then
For Each wks In Worksheets
wks.Protect UserInterfaceOnly:=True
Next wks
End If
End Sub
示例2:要求用戶輸入指定值
只有當工作簿中的工作表Sheet1的儲存格A1中的值為“完美Excel”時, 才能關閉該工作簿。 代碼如下:
Private Sub Workbook_BeforeClose(CancelAs Boolean)
If Worksheets("Sheet1").Range("A1") <> "完美Excel" Then
MsgBox "請在工作表Sheet1的儲存格中輸入""完美Excel"""
Cancel = True
End If
End Sub
關閉工作簿時, 如果工作表Sheet1的儲存格A1中的值不是“完美Excel”,
圖2
示例3:添加/刪除自訂快顯功能表
當僅需要在特定的工作簿中添加自訂快顯功能表時, 我們可以在Workbook_Open事件中添加自訂快顯功能表, 在Workbook_BeforeClose事件中刪除該菜單。 這是經常使用的一種技術。
下面的代碼在打開工作簿時, 在儲存格右鍵功能表中添加一個名為“完美Excel”的按鈕, 關閉工作簿時將其刪除。
Private Sub Workbook_Open()
Dim cmb As CommandBarControl
On Error Resume Next
Application.CommandBars("Cell").Controls("完美Excel").Delete
Set cmb = Application.CommandBars("Cell").Controls.Add _
(Type:=msoControlButton,Temporary:=True)
cmb.Caption = "完美Excel"
cmb.OnAction = "excelperfect"
End Sub
Private SubWorkbook_BeforeClose(Cancel As Boolean)
Dim strMsg As String
Dim Response
If Not ThisWorkbook.Saved Then
strMsg = "是否想要保存所做的修改?"
Response = MsgBox(strMsg, vbQuestion +vbYesNoCancel)
Select Case Response
Case vbYes
ThisWorkbook.Save
Case vbNo
ThisWorkbook.Saved = True
Case vbCancel
Cancel = True
Exit Sub
End Select
End If
On Error Resume Next
Application.CommandBars("Cell").Controls("完美Excel").Delete
End Sub
代碼中, 語句:
ThisWorkbook.Save
保存工作簿的修改而不會出現提示。
語句:
ThisWorkbook.Saved = True
放棄對工作簿所作的修改而不出現提示。
打開該工作簿時的右鍵菜單如圖3所示。
圖3
在BeforeClose事件中, 我們創建了自已的“保存”對話方塊。 之所以這樣做, 是因為如果在修改了工作簿而沒有保存時, Excel會彈出是否保存修改對話方塊, 這個對話方塊發生在BeforeClose事件之後, 此時, 如果用戶選擇“取消”而回到工作簿, 那麼功能表中的自訂按鈕已被刪除。