Workbook对象的属性,方法基本告一段落,今天讲讲Workbook对象的事件,这也是我们讲的第一个有事件的对象。 一、事件代码的写入位置就有规定的。 工作簿事件的代码只能写在该VBA工程的Thisworkbook对象的代码窗口中。 2013-12-1 23:56 上传 下载附件 (37.17 KB) 二、事件代码的过程已经有定义好了,不需要手工再录入。 在代码窗口的顶端有两个下拉列表 左边的是对象列表,下拉后列表中有通用和Workbook,选Workbook 右边的是过程/事件列表。 当在左边的对象列表中选择Workbook对象后,点击右边的下拉列表后显示的全是Workbook的事件过程。 在事件列表中选择任意一个事件后,过程声明就会添加在代码窗口中了,过程名称,过程参数(有的话)全都定义好了。 2013-12-1 23:56 上传 下载附件 (45.27 KB) 我们接下来逐个事件进行分析
激活工作簿时发生此事件。 注意:新建窗口时不发生此事件。 切换两个显示同一工作簿的窗口时,将发生 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也行。
在关闭工作簿之前,先产生此事件。 语法: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 '打印前先进行密码校验,密码正确后方能打印 |
|
来自: fzchenwl > 《excel精英培训》