Excel VBA解读(92):Workbook对象的Open事件和BeforeClose事件
本文详细讲解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事件之后,此时,如果用户选择“取消”而回到工作簿,那么菜单中的自定义按钮已被删除。
关注 完美Excel
微信扫一扫关注公众号