当前位置:首页 > 文化 > 正文

VBA对事件的监听

原创 2022-04-26 06:22 ·

【分享成果,随喜正能量】生活百般滋味,你要笑着面对,善待自己,顺其自然,生活才能处处是惊喜,事事有回应。人活一世,不要把什么都看得那么重,最怕什么都想计较,却又什么都抓不牢,盼不来的只能放下,留不住的学会放手。若人走情凉,就守心自暖;若聚散难免,便独享浮世清欢。一切顺其自然,不回头,不将就。。

《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实践经验,全部浓缩在下面的各个教程中:

【分享成果,随喜正能量】凡事不必苛求,来了就来了;凡事不必计较,过了就过了;遇事不要皱眉,笑了就笑了;结果不要强求,做了就对了;生活就是一种简单,心静了就平和了。

你可能想看:

有话要说...

取消
扫码支持 支付码