类是一种特殊的代码组织方式,普通模块写的代码是Sub过程、或者Function函数,而类模块里的代码,它都属于这个类,在它内部也可以有Sub过程、或者Function函数,但和普通模块里不同的是,它在使用之前,必须要先创建类的实例,也就是和VBA使用外部对象字典等那样,要New一个:
代码语言:javascript复制Set c = New 类
然后就可以像使用对象那样,调用类的方法、属性等。
1、创建类:
在VBA编辑器里,点击插入-类模块,就插入了一个叫做类1的东西,和普通模块一样的是,展现给我们的就是一个写代码的地方,尽管什么都没有写,但是这个操作已经创建了一个新的类了,在普通模块中已经可以去使用了:
代码语言:javascript复制Sub TestClass()
Dim c As 类1
Set c = New 类1
Set c = Nothing
End Sub
只不过这个类没有任何属性、方法,没有什么可以去使用的!
2、创建属性:
类的属性也是有固定格式的,和Sub、Function一样,属性也有这么一个关键字,叫做Property。
类的普通属性设置方法:
代码语言:javascript复制Private vTestProperty As Long
'设置属性
Property Let TestProperty(Value As Long)
vTestProperty = Value
End Property
'读取属性
Property Get TestProperty() As Long
TestProperty = vTestProperty
End Property
设置属性的时候,一般都要在类模块顶部定义一个私有变量来记录属性的值。
变量在赋值时,普通变量是使用Let,不过一般都省略,对象变量使用Set。
所以如果是类设置的属性是对象,那么Let就必须修改为Set。
设置好后,就可以在普通模块里去使用了:
代码语言:javascript复制Sub TestClass()
Dim c As 类1
Set c = New 类1
c.TestProperty = 1
Debug.Print c.TestProperty
Set c = Nothing
End Sub
使用方法和使用VBA里的对象是一样的,在输入“.”之后,也会给出提示。
3、创建方法:
创建方法和普通模块几乎没有区别:
代码语言:javascript复制Sub TestSub()
MsgBox "TestSub"
End Sub
Function TestFunction() As String
TestFunction = "TestFunction"
End Function
普通模块里,直接调用即可:
代码语言:javascript复制Sub TestClass()
Dim c As 类1
Set c = New 类1
c.TestProperty = 1
Debug.Print c.TestProperty
c.TestSub
Debug.Print c.TestFunction()
Set c = Nothing
End Sub
创建类,再创建属性、方法,也就是创建了一个自己的对象,这种代码的组织方式,在进行一些稍微复杂的程序开发时是非常有用的,但是初学者一般在前期是很少能用上的,只要知道有这么一种东西就可以。