【分享成果,随喜正能量】生活百般滋味,你要笑着面对,善待自己,顺其自然,生活才能处处是惊喜,事事有回应。人活一世,不要把什么都看得那么重,最怕什么都想计较,却又什么都抓不牢,盼不来的只能放下,留不住的学会放手。若人走情凉,就守心自暖;若聚散难免,便独享浮世清欢。一切顺其自然,不回头,不将就。。
《VBA中类的解读及应用》教程是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。
类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA对事件的监听
第四十讲 使用WithEvents定义响应事件的对象
大家好,我们继续VBA类的学习,在这套教程中,大家会逐步认识到很多事物的本质东西,在上一讲中我们提到事件的定义时指出,事件是对象的响应。这里的对象是指接收方或者称之为事件监听者。事件的整个过程对象:事件的发起方,或者称之为事件源(Event Source),可以为按钮对象;事件的响应方,或者称之为事件监听者(Event Sink),可以为窗体或者其他的对象。在上一讲也着重地指出:事件的监听方可以为多个对象。我们在这一讲就来测试一下。
1 WithEvents关键字的意义
这一讲中我们要向大家介绍VBA中的一个关键字:WithEvents(字面意思是携带事件)。这个关键字是什么意思呢?就是要引出我们将利用这个事件的对象。当然这个对象只能在类模块和窗体模块中有效,为什么呢?对于窗体是一个对象,这一点很容易理解;而类也可以看做是一个对象的。其实WithEvents定义的对象又何尝不是虚拟的呢?这一点只能理解吧。
好了我们先定义下面的一个窗体:
2 监听事件的代码
这个窗体中我们有两个按钮:按钮1和按钮2;一个标签;我们要在按钮1按下的时候窗体和标签同时监听到这个事件,同时有不同的反应。从而说明一个事件会由多个对象监听到。好了,我们看下面的代码:
Private WithEvents myCmd As CommandButton
Private Sub CommandButton1_Click()
MsgBox "你好,我是窗体"
End Sub
Private Sub CommandButton2_Click()
Label1.Caption = ""
End Sub
Private Sub myCmd_Click()
Label1.Caption = "您好,欢迎学习VBA"
End Sub
Private Sub UserForm_Initialize()
Set myCmd = UserForm1.CommandButton1
Label1.Caption = ""
End Sub
Private Sub UserForm_Terminate()
Set myCmd = Nothing
End Sub
代码截图:
3 事件监听过程的分析
代码解析:
1) 在这个过程中我们定义了一个myCmd对象,用于响应CommandButton1_Click,即CommandButton1的单击事件。
2) 在窗体的加载时Set myCmd = UserForm1.CommandButton1 令myCmd对象指向CommandButton1.
3) 当CommandButton1的单击事件发生时:窗体的监听到后弹出对话框,“你好,我是窗体”
对象myCmd监听到后修改了标签的文本内容“您好,欢迎学习VBA”
下面看一下代码的测试:
也许有的朋友说,老师,为什么要引入一个如此虚拟的对象mycmd 呢?把代码直接写入单击事件不就行了吗?各位学员,不要有这种想法,这套教程侧重的是理论,不是实现的手段。这里讲的是对于事件的监听,在理论学习阶段大家要理解这个过程。
对于事件的理解,希望大家能把握。
今日内容回向:
1 如何理解事件的监听?
2 一个事件的响应必须是一个对象吗?
本讲内容参考程序文件:VBA-CLASS(39-40).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
【分享成果,随喜正能量】凡事不必苛求,来了就来了;凡事不必计较,过了就过了;遇事不要皱眉,笑了就笑了;结果不要强求,做了就对了;生活就是一种简单,心静了就平和了。
有话要说...