类模块

2020-07-28 14:39:17 浏览数 (1)

类是一种特殊的代码组织方式,普通模块写的代码是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

创建类,再创建属性、方法,也就是创建了一个自己的对象,这种代码的组织方式,在进行一些稍微复杂的程序开发时是非常有用的,但是初学者一般在前期是很少能用上的,只要知道有这么一种东西就可以。

0 人点赞