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


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册