VBA 自定义数据类型

前面我们介绍VBA提供的类型,接下来我们定义自己的类型,包括:Type 类型、Enum类型。


1 Type

Type类型可以定义多个变量,即把多个变量封装在一起,类似于类中包含多个属性。

Type类型中不能包含过程与函数。

Type类型变量同时拥有类型中定义的多个变量。


Type类型声明

Type 类型名称
  变量1 As 数据类型1
  变量2 As 数据类型2
 …
  变量n As 数据类型n
End Type

示例。声明学生Type类型,其中包含:Id、姓名、生日。

' type类型
Private Type Student
  Id As Integer
  Name As String
  Birth As Date
End Type

Type类型变量的声明与访问

Sub main3()
  Dim s1 As Student
  s1.Id = 1
  s1.Name = "张三"
  s1.Birth = Date
  Debug.Print "ID:" & s1.Id & ",Name:" & s1.Name & ",birth:" & s1.Birth
End Sub

Student类型的一个变量s1同时拥有三个数据:Id、Name、Birth。访问更加简单。

输出结果:

ID:1,Name:张三,birth:2023/6/13

2 Enum

Enum类型用于定义枚举类型。枚举类型中包含多个成员(也称枚举名称),每个成员(枚举名称)对应一个枚举值。

枚举类型变量的值只能为其中一个成员。

枚举类型的优点:当有多个成员时,通过见名思义的成员名称来访问,提高代码的可读性。


声明枚举类型

Enum 枚举类型名称
  成员1
  成员2
  …
  成员n
End Enum

其中枚举类型名称中包含:成员1、成员2…成员n。

示例如下。声明颜色类型,包含红、蓝、绿三个成员。

Enum Color
  RED
  GREEN
  BLUE
End Enum

声明与访问枚举类型变量

Sub main1()
  '声明枚举类型变量
  Dim c1, c2, c3 As Color

  '枚举变量赋值
  c1 = Color.RED
  c2 = Color.GREEN
  c3 = Color.BLUE 

  '打印枚举变量
  Debug.Print "c1:" & c1
  Debug.Print "c2:" & c2
  Debug.Print "c3:" & c3

End Sub

输出结果:

c1:0
c2:1
c3:2

声明枚举类型时,虽然没有为成员赋值,但默认为赋值,按顺序依次为0、1、2…

也可以在声明枚举类型时为变量赋值。

声明如下。

Enum Color2
  RED = 100
  GREEN = 200
  BLUE = 300
End Enum

枚举类型变量的声明与访问如下

Sub main2()
  '声明枚举类型变量
  Dim c1, c2, c3 As Color2

  '枚举变量赋值
  c1 = Color2.RED
  c2 = Color2.GREEN
  c3 = Color2.BLUE
  
  '打印枚举变量
  Debug.Print "c1:" & c1
  Debug.Print "c2:" & c2
  Debug.Print "c3:" & c3
End Sub

输出结果:

c1:100
c2:200
c3:300