- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Excel中VBA文章第十四章
第十四章 微软Excel 2002 中的事件编程
作者:Julitta Korol 翻译:Tiger Chen Oct 21’ 2005
你如何使当用户点击工作表单元格时出现的内置快捷菜单失活?你如何在工作簿打开或者关闭之前显示一个自定义信息?你如
何验证输入在单元格或者单元格区域里的数据?要想对Excel获得彻底控制的话,你必须学习如何响应事件。学习如何进行事件 编程将让你贯彻你自己的功能性到Excel应用软件里去。你需要学习有关该主题的第一件事情就是,什么是事件。这里有个简单 的定义:
事件是发生的东西 无需说,对象发生的事件是Excel的一部分,然而,一旦你学习了Excel中的事件知识,你将发现更容易去理解发生在Word或者 其它任何微软办公软件的对象事件。事件是由对象认可的行动。 既然你知道了什么是事件,那么你需要知道事件是可以被一个应用软件用户(例如你自己),另一个程序或者系统本身引发的。 因此,你如何能够引发事件呢?假设你右键单击一个工作表单元格,该具体操作将显示一个内置的工作表单元格快捷菜单,允许 你快速的访问和工作表单元格相关的频繁使用的命令。但是,万一在某种情况下该内置响应不对呢?你可能想要完全不接受工作 表的右键单击,或者当用户右键单击任何单元格时,单元格快捷菜单上出现一个自定义菜单。有个好消息,就是你可以使用VBA 来编写代码对事件进行反应。
Excel提供了许多事件供你响应,下述对象可以响应事件:
? 工作表
? 图表
? 透视表
? 工作簿
? 应用软件 通过编写时间过程,你可以决定当事件发生时发生什么。
事件过程介绍
事件过程,作为一种特殊的VBA过程,用来对特定的事件作出反应。该过程包含处理具体事件的VBA代码。有些事件只需要简单
的一行代码,然而,其它的可能更复杂。事件过程拥有名称,按下述方式创建:
对象名称_事件名称() 在事件名称后面的括号里,你可以放置需要发送到过程里的参数。程序员不能更改事件过程名称。 在你编写事件过程对Excel事件作出反应之前,你需要知道:
? 想要响应的具体对象和事件的名称
响应事件的对象在代码窗口的过程下拉清单里显示了一系列事件(见图14-1)。同样,你也可以使用对象浏览器找到事件 名称(见图14-2)。
? 你需要放置代码的地方
有些事件在标准模块里,其它的在类模块里。然而,工作簿,图表和工作表事件对任何打开的工作表或者工作簿可用。要 给一个内嵌的图表,透视表或者应用软件对象创建事件过程的话,那么你必须首先使用关键字With Events在类模块里创建 一个新对象
图14-1 你可以在代码窗口找到事件名称
图14-2 你可以在对象浏览器里找到事件名称
激活和失活事件
你可以使用应用软件对象的EnableEvents属性来激活或者失活事件。如果你编写了VBA过程但是不希望有个具体事件发生,那
么就将EnableEvents属性设置为False。例如,为了避免在运行过程EnterData(参见下面代码)引发Workbook_BeforeClose事 件,那么在调用Workbook对象Close方法之前,设置EnableEvents属性为False。在你的程序结束之前,你得将EnableEvents 属性设置回True,确保事件被激活了。
1. 打开一新工作簿并另存为DisableEvents.xls
2. 切换到VB编辑器屏幕,双击工程浏览器窗口的ThisWorkbook,并且在出现的代码窗口里输入Workbook_BeforeSave事件 过程
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
If MsgBox(Would you like to copy vbCrLf _
this worksheet to vbCrLf _
a new workbook?, vbYesNo) = vbYes Then
Sheets(ActiveSheet.Name).Copy
End If
End Sub
3. 选择插入|模块添加一个标准模块激活VBA工程,并且输入下面显示的过程:
Sub EnterData()
With ActiveSheet.Range(A1:B1)
.Font.Color = vbRed
.Value = 15
End With
Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
End Sub
4. 切换到Excel应用软件窗口,并且
文档评论(0)