《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。
类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA中类的解读及应用第九讲:用WithEvents关键字声明实例化对象类变量
【分享成果,随喜正能量】想一想,自己造下的、还没忏悔清净的恶有多少?要想临终不随恶趣,有多困难?按照多数人目前的情况来看,根本没有不堕落三恶趣的把握。但是,只要你一心依止阿弥陀佛,就可以在这一生结束后直接生到净土,彻底脱离恶趣,乃至永超生死苦海。。
第九讲 用WithEvents关键字声明实例化对象类变量
在上几讲中,我们首先定义了类,命名了类的名称,同时定义了类的事件,在事件的定义中我们知道,事件指的是类引发的一个调用;是对象的响应。我们把这个定义再确切一下,事件指的是类引发的一个调用;是类实例化后对象的响应。如果我们把后面的对象变更成实例化后对象,这样就更好理解了。首先命名一个类,然后声明类所响应的事件,但在实际应用的时候必须要把这个类实例化之后才可以用。
引发事件的实例化类对象叫做事件源,为了处理事件源所引发的事件,可以用WithEvents 关键字声明实例化类对象变量。我们再理解一下这句话的意思:在实际的应用中,我们是面对对象的,类对象作为变量出现时,可以响应某个事件,在声明这种对象变量的时候,我们采用的声明语句是WithEvents。
1 使用WithEvents关键字的注意事项
1)WithEvents 变量不能是派生对象变量。也就是说,不能把它声明为 As Object(当声明该变量时必须指定类名)。
Eg:错误的写法:Dim WithEvents a as Object
正确的写法:Dim WithEvents a as Text
2)不能把 WithEvents 变量声明为 As New,即 WithEvents 关键字和 New 关键字不能同时使用。如果定义成下面这样就会报错:as New Text
3)不能在标准模块中声明 WithEvents 变量。只能在类模块、窗体模块以及其它定义类的模块中声明。
4)虽然WithEvents是Dim,Public,Private语句的关键字,但是不能在过程里面中用WithEvents关键字进行对象变量的声明,只能在通用里使用。
5)只能使用 WithEvents 声明单个变量,不能声明数组。
2 用WithEvents关键字声明类变量的实例
实例讲解:今日我们仍以上讲的例子进行讲解,在上一讲中我们定义了mytime类,在这个类中,我们声明了两个事件如下,一个是UpdateTime,一个是dabiao。
Option Explicit
Public Event UpdateTime(ByVal mynow As Double)
Public Event dabiao()
代码截图:
这两个事件是类mytime的事件,要实例化mytime形成对象后要响应的事件。那么实例化mytime形成的对象是什么对象呢?
我在窗体模块代码中进行了withevents的声明:
Private WithEvents mText As mytime
也就是说在窗体中要实例化MYTIME 形成类对象为mText,这个对象是在窗体的构建中实现的:
Option Explicit
Private WithEvents mText As mytime
Private Sub CommandButton1_Click()
TextBox1.Text = "开始计时:"
TextBox2.Text = "0"
mText.TimerTask (9)
End Sub
Private Sub CommandButton2_Click()
End
End Sub
Private Sub mText_dabiao()
TextBox1.Text = "已经达到标准"
DoEvents
End Sub
Private Sub mText_UpdateTime(ByVal mynow As Double)
TextBox2.Text = Str(Format(mynow, "0"))
DoEvents
End Sub
Private Sub UserForm_Initialize()
TextBox1.Text = ""
TextBox2.Text = ""
Set mText = New mytime
End Sub
Private Sub UserForm_Terminate()
End
End Sub
如下面的窗体代码截图:
在窗体的构建函数中利用了Set mText = New mytime把类这个灵魂实例化为肉身对象mText了。
这样,我们就可以用这个对象来响应事件UpdateTime,dabiao了,我们看看窗口提示的事件截图:
提示了两个事件,可以利用。
到这里,大家已经逐渐地了解了类的相关知识,比较抽象,但不是很难理解,今后的讲解中将利用这些知识点,实现我们的具体应用。
本讲内容参考程序文件:VBA-CLASS(1-28).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中: