本文詳細(xì)講解Workbook對(duì)象常用的兩個(gè)事件:Open事件和BeforeClose事件。
Workbook_Open事件
當(dāng)打開(kāi)工作簿時(shí)發(fā)生Workbook_Open事件。
在ThisWorkbook代碼模塊中輸入下面的代碼,使工作簿打開(kāi)時(shí)彈出一個(gè)消息框:
Private Sub Workbook_Open()
MsgBox '歡迎來(lái)到[完美Excel]微信公從號(hào)!'
End Sub
在打開(kāi)工作簿時(shí),彈出如圖1所示的消息框。
圖1
Workbook_BeforeClose事件
在關(guān)閉工作簿之前發(fā)生該事件。如果修改了工作簿但沒(méi)有保存修改,那么該事件發(fā)生在詢問(wèn)用戶保存修改之前。
其語(yǔ)法為:
Workbook_BeforeClose(Cancel As Boolean)
說(shuō)明:
參數(shù)Cancel為布爾值,必需。事件發(fā)生時(shí)為False;如果事件過(guò)程將此參數(shù)設(shè)置為True,則停止關(guān)閉工作簿并且工作簿保持打開(kāi)狀態(tài)。
下面的代碼在關(guān)閉工作簿時(shí)總是會(huì)保存對(duì)該工作簿的修改,而不會(huì)彈出詢問(wèn)是否保存修改的消息框。
Private SubWorkbook_BeforeClose(Cancel As Boolean)
If Me.Saved = False Then Me.Save
End Sub
Workbook_Open事件可用于在打開(kāi)工作簿時(shí)初始化工作簿,設(shè)置計(jì)算模式、設(shè)置屏幕、添加自定義菜單、為工作表中的組合框或列表框添加數(shù)據(jù)。Workbook_BeforeClose事件可用于恢復(fù)工作簿的初始設(shè)置、阻止用戶關(guān)閉工作簿,等等。
示例1:設(shè)定特定用戶才能操作工作表
下面的代碼在打開(kāi)工作簿時(shí)檢查用戶名是否為“完美Excel”,如果不是,則保護(hù)工作表,防止其他用戶對(duì)其進(jìn)行修改。
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:要求用戶輸入指定值
只有當(dāng)工作簿中的工作表Sheet1的單元格A1中的值為“完美Excel”時(shí),才能關(guān)閉該工作簿。代碼如下:
Private Sub Workbook_BeforeClose(CancelAs Boolean)
If Worksheets('Sheet1').Range('A1') <> '完美Excel' Then
MsgBox '請(qǐng)?jiān)诠ぷ鞅?/span>Sheet1的單元格中輸入''完美Excel'''
Cancel = True
End If
End Sub
關(guān)閉工作簿時(shí),如果工作表Sheet1的單元格A1中的值不是“完美Excel”,則會(huì)彈出如下圖2所示的提示消息。
圖2
示例3:添加/刪除自定義快捷菜單
當(dāng)僅需要在特定的工作簿中添加自定義快捷菜單時(shí),我們可以在Workbook_Open事件中添加自定義快捷菜單,在Workbook_BeforeClose事件中刪除該菜單。這是經(jīng)常使用的一種技術(shù)。
下面的代碼在打開(kāi)工作簿時(shí),在單元格右鍵菜單中添加一個(gè)名為“完美Excel”的按鈕,關(guān)閉工作簿時(shí)將其刪除。
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
代碼中,語(yǔ)句:
ThisWorkbook.Save
保存工作簿的修改而不會(huì)出現(xiàn)提示。
語(yǔ)句:
ThisWorkbook.Saved = True
放棄對(duì)工作簿所作的修改而不出現(xiàn)提示。
打開(kāi)該工作簿時(shí)的右鍵菜單如圖3所示。
圖3
在BeforeClose事件中,我們創(chuàng)建了自已的“保存”對(duì)話框。之所以這樣做,是因?yàn)槿绻谛薷牧斯ぷ鞑径鴽](méi)有保存時(shí),Excel會(huì)彈出是否保存修改對(duì)話框,這個(gè)對(duì)話框發(fā)生在BeforeClose事件之后,此時(shí),如果用戶選擇“取消”而回到工作簿,那么菜單中的自定義按鈕已被刪除。
聯(lián)系客服