Workbook对象的属性,方法基本告一段落,今天讲讲Workbook对象的事件,这也是我们讲的第一个有事件的对象。
一、事件代码的写入位置就有规定的。
工作簿事件的代码只能写在该VBA工程的Thisworkbook对象的代码窗口中。
2013-12-1 23:56 上传
下载附件 (37.17 KB)
二、事件代码的过程已经有定义好了,不需要手工再录入。
在代码窗口的顶端有两个下拉列表
左边的是对象列表,下拉后列表中有通用和Workbook,选Workbook
右边的是过程/事件列表。
当在左边的对象列表中选择Workbook对象后,点击右边的下拉列表后显示的全是Workbook的事件过程。
在事件列表中选择任意一个事件后,过程声明就会添加在代码窗口中了,过程名称,过程参数(有的话)全都定义好了。
2013-12-1 23:56 上传
下载附件 (45.27 KB)
我们接下来逐个事件进行分析
Workbook.Activate 事件
激活工作簿时发生此事件。
注意:新建窗口时不发生此事件。
切换两个显示同一工作簿的窗口时,将发生 WindowActivate 事件,但不发生工作簿的 Activate 事件。
示例:
Private Sub Workbook_Activate()
MsgBox '工作簿 ' & ThisWorkbook.Name & '激活了'
End Sub
‘新建一个工作簿,然后再切换回来,就可以看到一个消息框。
Workbook.Deactivate 事件
工作簿被停用时发生此事件。
当一个工作簿从活动工作簿成为非活动工作簿时事件触发。
说通俗点,就是激活另外一个工作簿对象时,原来的工作簿就会触发Deactivate事件
Private Sub Workbook_Deactivate()
Thisworkbook.save
End Sub
’工作簿对象停用时保存,如果是新建的文件的话,这里推荐用saveas方法
至于如何检测到是新建的工作簿,之前讲过的path属性就能实现。
在Thisworkbook对象中,可以直接用me代码Thisworkbook
面的thisworkbook.save写成me.save也行。
Workbook.BeforeClose 事件
在关闭工作簿之前,先产生此事件。
如果该工作簿已经更改过,则本事件在询问用户是否保存更改之前产生。
语法:BeforeClose(Cancel)
Cancel参数是必须的,当事件发生时False,如果将此参数设置为True,则停止关闭操作。
Private Sub Workbook_BeforeClose(Cancel asBoolean)
If Me.Saved = False Then Me.Save
End Sub
‘如果工作簿没有保存,则执行save方法保存工作簿
Workbook.BeforeSave 事件
保存工作簿之前发生此事件。
语法:BeforeSave(SaveAsUI, Cancel)
SaveAsUI 必选 Boolean 如果将显示“另存为”对话框,则为 True。
Cancel 必选 Boolean 当事件发生时为 False。如果该事件过程将此参数设置为 True,则该过程完成后将不保存工作簿。
示例:
Private Sub Workbook_BeforeSave(ByValSaveAsUI As Boolean, _
Cancel as Boolean)
a= MsgBox('是否保存工作簿?', vbYesNo)
If a = vbNo Then Cancel = True
End Sub
‘在保存工作簿之前询问用户是否保存。
Workbook.BeforePrint 事件
在打印指定工作簿(或者其中的任何内容)之前,发生此事件。
语法:BeforePrint(Cancel)
范例:
Private Sub Workbook_BeforePrint(Cancel AsBoolean)
If InputBox(prompt:='请输入打印密码:') <> '123456' Then
Cancel = True
MsgBox '密码不对,结束打印!', vbCritical + vbOKOnly
Exit Sub
End If
MsgBox '点击 确认,打印开始'
End Sub
'打印前先进行密码校验,密码正确后方能打印
联系客服