VBA中类的解读及应用第九讲:用WithEvents关键字声明实例化对象类变量

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。

类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA中类的解读及应用第九讲:用WithEvents关键字声明实例化对象类变量VBA中类的解读及应用第九讲:用WithEvents关键字声明实例化对象类变量_第1张图片

【分享成果,随喜正能量】想一想,自己造下的、还没忏悔清净的恶有多少?要想临终不随恶趣,有多困难?按照多数人目前的情况来看,根本没有不堕落三恶趣的把握。但是,只要你一心依止阿弥陀佛,就可以在这一生结束后直接生到净土,彻底脱离恶趣,乃至永超生死苦海。。

第九讲 用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()

代码截图:

ced6c428a93e379185ac23f23f267ffa.jpeg

这两个事件是类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

如下面的窗体代码截图:

VBA中类的解读及应用第九讲:用WithEvents关键字声明实例化对象类变量_第2张图片

在窗体的构建函数中利用了Set mText = New mytime把类这个灵魂实例化为肉身对象mText了。

这样,我们就可以用这个对象来响应事件UpdateTime,dabiao了,我们看看窗口提示的事件截图:

VBA中类的解读及应用第九讲:用WithEvents关键字声明实例化对象类变量_第3张图片

提示了两个事件,可以利用。

到这里,大家已经逐渐地了解了类的相关知识,比较抽象,但不是很难理解,今后的讲解中将利用这些知识点,实现我们的具体应用。

本讲内容参考程序文件:VBA-CLASS(1-28).xlsm

VBA中类的解读及应用第九讲:用WithEvents关键字声明实例化对象类变量_第4张图片

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:


VBA中类的解读及应用第九讲:用WithEvents关键字声明实例化对象类变量_第5张图片

VBA中类的解读及应用第九讲:用WithEvents关键字声明实例化对象类变量_第6张图片

你可能感兴趣的:(边缘计算)