|
本帖最后由 wpxxsyzx 于 2014-10-22 14:35 编辑
逛msdn,无意间发现CommandBars对象具有OnUpdata事件,其解释也很简单,就是工具栏更新时触发此事件。经测试,很多常用操作都会引起工具栏的更新,所以,可以利用这个事件实时监测用户是否对某些对象执行了操作,既某些对象是否发生变化,例如:选择、添加、删除Shape对象,更改工作表的顺序,使用鼠标滚轮滚动表格等(excel本身不为这些对象的变化提供相关的事件)。
说在前面,说是给Shape对象添加事件,其实也可以给其他对象添加额外的事件来监测对象的变化;示例都写成类的形式,是为了方便演示和理解,其实也可以直接在代码中使用OnUpdata事件而不用写入类模块里。总之,本帖是为了介绍OnUpdata事件,示例没有全面考虑所有可能的情况,还有很多漏洞,仅仅是个介绍,有兴趣的朋友可以研究下,使之更完善或者实现更多的功能。
下面通过一个简单例子来认识一下OnUpdata事件,此示例监测显示比例是否变化,如果是,根据情况作出相应的调整。
1、添加一个类模块clsZoom,并输入以下声明
Public WithEvents cmdBars As CommandBars
Public Event Zoom(ByVal number As Integer)
使用WithEvents声明变量cmdBars 为 CommandBars类型,WithEvents关键字用来引出CommandBars对象的事件:OnUpdata(这个事件也是CommandBars对象公开的唯一一个事件),并把事件添加到VBE编辑器“过程”列表框里。
使用Event语句为类声明一个名字为Zoom的事件过程
2、在VBE编辑器界面依次单击“对象”列表框——“cmdBars”选项,为类添加“cmdBars_OnUpdate”事件。
3、依次单击“对象”列表框——“Class”选项——“过程”列表框——“Class”选项,为类添加初始化事件“Class_Initialize”。
完整的代码:
Public WithEvents cmdBars As CommandBars
Public Event Zoom(ByVal number As Integer)
Private Sub Class_Initialize()
'将应用程序的CommandBars对象赋值给变量cmdBars,当用户在界面或使用代码操作excel时,
'将会使CommandBars对象产生更新,触发cmdBars_OnUpdate事件
Set cmdBars = Application.CommandBars
End Sub
Private Sub cmdBars_OnUpdate()
If ActiveWindow.Zoom <> 100 Then
'使用RaiseEvent语句触发Zoom事件并把当前窗口的显示比例作为参数传入
RaiseEvent Zoom(ActiveWindow.Zoom)
End If
End Sub
4、在ThisWorkbook模块添加以下代码:
Private WithEvents MyZoom As clsZoom
使用WithEvents 声明变量MyZoom 为 clsZoom类型,引出我们在clsZoom类模块里使用Event语句声明的Zoom事件并添加到VBE编辑器“过程”列表框里。
5、依次单击“对象”列表框——“MyZoom”选项——“过程”列表框——“Zoom”选项,添加MyZoom_Zoom事件过程并输入代码。
Private Sub MyZoom_Zoom(ByVal number As Integer)
'在这里输入你的代码以实现在显示比例变化时想要的结果
If number > 100 Or number < 80 Then
ActiveWindow.Zoom = 100
End If
End Sub
6、添加如下代码
Private Sub Workbook_Open()
Set MyZoom = New clsZoom
End Sub
7、代码是如何工作的
在打开工作薄时使用New关键字创建clsZoom类的实例并赋值给变量MyZoom,代码转到clsZoom类模块中的Private Sub Class_Initialize()事件过程中执行。当用户操作excel时将会触发clsZoom类模块中的Private Sub cmdBars_OnUpdate()事件过程,执行该过程中的代码,如果用户在界面修改或者使用代码修改了显示比例,则使用RaiseEvent语句触发 Zoom事件,代码转到ThisWorkbook模块中的Private Sub MyZoom_Zoom(ByVal number As Integer)事件过程中继续执行,如果显示比例不在规定范围内,则调整显示比例为100。
|
评分
-
3
查看全部评分
-
|