您的位置:首頁>正文

Excel VBA解讀(92):Workbook物件的Open事件和BeforeClose事件

本文詳細講解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所示的提示消息。

圖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事件之後, 此時, 如果用戶選擇“取消”而回到工作簿, 那麼功能表中的自訂按鈕已被刪除。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示