本文详细讲解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)
说明:
下面的代码在关闭工作簿时总是会保存对该工作簿的修改,而不会弹出询问是否保存修改的消息框。 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事件之后,此时,如果用户选择“取消”而回到工作簿,那么菜单中的自定义按钮已被删除。
|
|