【分享成果,随喜正能量】行有不得,反求诸己。如果总是在苛求外界,那么,就只会让自己烦恼不断;只有管好自己,不断完善自己,才能让一切逐渐好起来。活得通透的人,往往会明白,我,才是一切的根源。。
《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。
类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:第四讲:打开你的VBE,开始建立属于你的类模块(下)
第四讲 打开你的VBE,开始建立属于你的类模块
大家好,今天继续讲解VBA中类的解读及应用,今日讲解第4讲内容: 打开你的VBE,开始建立一个你的类模块。
我们打开VBE的窗口,插入一个类模块,这时也就建立了一个类。类模块的名字就是类的名字。我们可以选中这个类模块,按下F4件修改你需要的名称,这里我们将“类1”改名为“MyClass”,在名字下面你会看到只有一个属性:Instancing,其值也只有两个选项:Private和PublicNotCreatable。Instancing属性决定该“类”在其它工程中是否可以被使用。我们知道,标准模块中的Public过程,可以保存在宏工作簿,可以被另一工作簿的工程调用,但类中的代码是不可分割的整体,所以必须整体决定是否允许外用。当Instancing属性设为Private(默认)时,不允许其它工程访问。当设置为PublicNotCreatable时,只有在自己的工程创建了该类的对象时,其它工程才允许使用这个对象,注意,仅仅是在本工程中创建的对象,而不能用它在其它工程中创建对象。这就是上面两个值的意义。
2 给类对象属性赋值方法
我们知道,给普通变量和对象变量赋值的方式不同,对象变量是使用Set赋值的。对“对象”属性,VBA提供了Property Set来代替构建“普通”属性使用的Property Let。来看一段代码,和前面的比较一下,只是多一个Set。
Private tx As Object
Property Get x() As Object
Set x = tx
End Property
Property Set x(ByVal o As Object)
Set tx = o
End Property
可以按照Function去记住Property Get的用法,按照Sub去记住Property Let /Set。
3 给属性初始赋值的方法
我们常常希望,当一个对象建立的时候,它的某些属性会被自动赋予一个初始值,这样,对具有最常见的属性值的对象可以减少重复性的赋值工作。这需要借助于类的构建函数来完成。
在类模块代码窗口的“通用”框中点击向下的小三角箭头,选择“myClass”,右面声明框中可以看到两个选项,“Initialize”和“Terminate”,我们对它们应该不陌生,很多对象都有这两个事件,Initialize事件是在对象建立时发生,Terminate事件是在对象释放时发生。由于类是静态存在的,它并不是真正的对象,所以在类模块中,它们通常被称为构建函数和析构函数,或构建过程和析构过程。对它们的理解和在对象中的用法并没有什么不同。当一个对象被建立时,构建函数将被首先执行,同样,当对象释放后,将执行析构函数。
下面代码建立MyClass属性r,并赋初始值为”0001”:
[类模块MyClass的代码]:
Option Explicit
Private s$
Public Property Get r() As String
r = s
End Property
Public Property Let r(ByVal c As String)
s = c
End Property
Public Private Sub Class_Initialize()
s = "0008"
End Sub
[标准模块1的代码]
Sub mynzclass4() '第4讲打开你的VBE,开始建立属于你的类模块
Dim mycl As New MyClass
MsgBox "MyCl的初始属性为:" & mycl.r
End Sub
代码的截图:
运行:
今日内容回向:
1 如何建立类的属性?
2 如何给属性赋初始值?
本讲内容参考程序文件:VBA-CLASS(1-28).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中: