本文详细讲解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事件之后,此时,如果用户选择“取消”而回到工作簿,那么菜单中的自定义按钮已被删除。

workbook对象需要关闭_Excel VBA解读(92):Workbook对象的Open事件和BeforeClose事件相关推荐

  1. navicat存储过程返回值为空_Excel VBA解读(128):Function过程详解——枯燥的语法...

    学习Excel技术,关注微信公众号: excelperfect 在<Excel VBA解读(27):看看VBA的Sub过程和Function过程>中,我们讲解了Function过程的基本形 ...

  2. 必须声明标量变量_Excel VBA解读(136): 在用户定义函数中的变体、引用、数组、计算表达式、标量...

    学习Excel技术,关注微信公众号: excelperfect 在前面的几篇文章中,我们自定义的函数使用定义为Range的参数来从Excel工作表中获取数据,例如: Function VINTERPO ...

  3. vba复制整个sheet内容_Excel VBA解读(74):移动或复制工作表——Move方法和Copy方法...

    有时候,我们可能想复制工作表,保留一份工作表的副本,以免误操作打乱工作表后无法恢复.有时候,我们也可能想移动工作表,调整工作表顺序,将工作表重新排列,以方便工作表的布置.本文介绍在VBA中实现这两种操 ...

  4. resize函数_Excel VBA解读(134): 使用Excel函数提高自定义函数的效率

    学习Excel技术,关注微信公众号: excelperfect 在上篇文章中,我们展示了自定义函数有效的方式是通过将单元格区域读取到Variant型数组来传递单元格区域数据.本文将介绍在自定义函数中最 ...

  5. redirect通过url_for传递参数_Excel VBA解读 | 进阶篇(127):Sub过程的参数传递技术...

    学习Excel技术,关注微信公众号: excelperfect 前面用了几篇文章详细讲解了Sub过程的语法及相关知识,本文进一步讲解与Sub过程相关的一些"重要事项",以进一步理解 ...

  6. this.$modal.confirm 自定义按钮关闭_Excel迫使人类基因重命名?用VBA给科学家们支一招!—— 怎样快速定制工具栏按钮...

    点击上方蓝色文字关注我们吧~ 大家好!前几天有一个不大不小的科技新闻引起了很多朋友的共鸣: -NO.01- 为什么Excel会让科学家犯愁? - -  - - 之所以说它能引起共鸣,是因为科学家们遇到 ...

  7. 应用程序对象正在关闭_Windows核心编程-内核对象

    概念:内核对象可以供系统和应用程序使用来管理各种各样的资源,Windows程序员可以调用Windows API去创建.打开和操作各种内核对象.常见的内核对象有:访问令牌.事件对象.文件对象.文件映射对 ...

  8. VBA 批量打开workbook工作簿,汇总到同一workbook工作簿中

    ** VBA 批量打开workbook工作簿,汇总到同一workbook工作簿中 ** 前言:此VBA程序,通用! Sub 收集文件夹中文件路径() Dim f'1.批量打开文件,将文件路径记录到数组 ...

  9. vba 定义类_工作表中如何响应自定义事件

    大家好,在上两讲中讲了类模块的调试行为,对于我们写代码人员来讲,要充分地理解每个知识点的概念,才能在实际工作中灵活运用,在我的第一套教程<VBA代码解决方案>中,我推出的是一种积木编程的思 ...

最新文章

  1. iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)
  2. LeetCode 16 3Sum Closest
  3. OpenCV在图像上画线、矩形、椭圆、多边形、填充的多边形、圆、显示文字
  4. windows10安装Oracle提示错误-INS-13001环境不满足最低要求
  5. c语言 临时文件作用,c语言函数mktemp()产生唯一临时文件名实例源码介绍
  6. 阿里云容器服务全面升级为 ACK Anywhere,让云的边界拓展至企业需要的每个场景
  7. SQL 关于apply的两种形式cross apply 和 outer apply(转)
  8. java 单向链表 双向链表_java 单向链表与双向链表的实现
  9. HTTP POST发消息
  10. 中兴通讯首届郑和杯无线应用创作挑战赛正式启动
  11. ImageView设置边框的两种方式
  12. 更好的理解装饰设计模式和代理设计模式
  13. 华为2288服务器怎样查看硬盘,华为RH2288H V2磁盘系统测试_华为 FusionServer RH2288 V2_服务器评测与技术-中关村在线...
  14. linux创建文件夹操作步骤,linux如何用命令创建新建文件夹
  15. 中职学校计算机课听课记录表,中职语文听课记录10篇
  16. git 修改commit内容(--amend)
  17. 儒雅计算机导师,龙桂鲁:儒雅的学者,严慈的良师-清华大学新闻网
  18. IOT语义互操作性之本体论 1
  19. 入行软件测试5年,跳槽3次,我摸透了软件测试这一行
  20. iOS15.6和iOS15.5哪个更省电 iOS15.6建不建议升级

热门文章

  1. Linux Shell 打开软件时最小化窗口
  2. Python中按位取反运算操作的解法
  3. C语言 编写函数Fun1实现分段函数运算,并返回函数值。在主函数调用Fun1函数,接收输入的x值,并输出函数值。
  4. 更改电脑用户名(C:\Users\用户名)
  5. 2022 七校联合NewStarCTF 公开赛赛道 WEEK2|CRYPTO
  6. 冗余系统研究:智能汽车的最后安全防线
  7. 回路电感详细介绍(环路电感)
  8. 数据仓库(五)元数据管理
  9. c语言记录键盘敲击次数,【转】你知道一天敲键盘的敲击次数能达到多少么
  10. 细雨算法升级,针对B2B领域低质内容