VBA Set 对象赋值
先回顾变量的赋值操作
变量名 = 值
但本章中出现大量的set赋值操作
Set 变量名 = 值
问题:什么时候使用set?
根据变量的数据类型来区分:
如果数据类型属于类,变量此时也称之为对象,为对象赋值则需要通过set赋值;
如果数据类型不属于类,变量不是对象,则不需要通过set赋值。
IsObject方法用于判断变量的类型是否类。
Object类是所有类的父类。
示例
例1:不是类的数据类型。Integer、Double、String、Date等类型都不是类。
Sub sub1()
Dim a1 As Integer
Dim a2 As Double
Dim a3 As String
Dim a4 As Date
Debug.Print IsObject(a1) '打印 False
Debug.Print IsObject(a2) '打印 False
Debug.Print IsObject(a3) '打印 False
Debug.Print IsObject(a4) '打印 False
a1 = 2023
a2 = 20.23
a3 = "小步教程"
a4 = #6/16/2023#
End Sub
例2:创建属于类的数据类型。这里我们创建自己的类Student。
[工程资源管理器],右键菜单—[插入]—[类模块]。
属性窗口中修改名称为自定义名称:Student
Student中包含三个属性:ID、姓名、性别,display方法,显示信息。代码如下:
Public m_id As Integer '学生ID
Public m_name As String '学生姓名
Public m_gender As Boolean '学生性别
'显示学生信息
Public Sub display()
Debug.Print "id:" & m_id & ",name:" & m_name & ":gender:" & m_gender
End Sub
有一类数据类型通过创建类模块来声明类。它的祖宗父类实际就是Object。
在其它码窗口中编写使用Student类。注:下面代码不能放在Student类中。
Sub sub2()
'声明类的变量,即对象
Dim a1 As Student
'为对象赋值需要Set
Set a1 = New Student
'对象的属性不是类这个类型,所以不用set
a1.m_id = 1001
a1.m_name = "小步教程"
a1.m_gender = True
a1.display
Dim a2 As Student
'把A对象赋值给B对象,也需要使用Set
Set a2 = a1
a2.display
Debug.Print IsObject(a1) '打印True
Debug.Print IsObject(a2) '打印True
'打印False,因为a1.m_id是Integer类型
Debug.Print IsObject(a1.m_id)
End Sub
其中两处使用了Set,都是为对象本身赋值;
而为对象的成员赋值,一般不用。
例3:判断四大Excel对象对应的类型是否属于类。
Sub sub3()
Dim a1 As Application
Dim a2 As Workbook
Dim a3 As Worksheet
Dim a4 As Range
Debug.Print IsObject(a1)
Debug.Print IsObject(a2)
Debug.Print IsObject(a3)
Debug.Print IsObject(a4)
End Sub
输出结果:全部返回True。
小结:通过IsObject判断返回为True的类型,需要使用Set;返回False则不需要。