环境
- Microsoft Office 2000及以上版本的Microsoft Visual Basic for Applications
论述
Visual Basic for Application(以下简称“VBA”)语言是强类型语言,即定义时需要提供类型,可以是简单类型(如 Integer,Long,Single,Double,String,Boolean 或 Date 等)和复杂类型(如枚举或对象等)。如果在定义时没有提供类型则为 Variant 类型(表示该变量可以拥有上述任意类型的值)。Empty 和 Null 关键字用于 Variant 变量的赋值,Nothing 关键字用于对象变量的赋值。
- Nothing 关键字用于对象变量,表示取消对象变量与对象实例的关联。 使用**Set** 语句可将 Nothing 分配给对象变量。 例如
Set objAny = Nothing
如果一个对象实例仅被赋予一个对象变量,则对象变量赋值Nothing后对象实例会被销毁(即对象实例所占内存会被释放)。
Dim objFile As clsFile
Set objFile = New clsFile ' 创建对象实例,并赋予对象变量objFile
...
Set objFile = Nothing ' 对象实例不再被引用会销毁
如果一个对象实例被赋予多个对象变量,则只有当所有对象变量被赋值Nothing后对象实例才会被销毁。
Dim objParent As clsParent
Dim objChild1 As clsChild
Dim objChild2 As clsChild
Set objParent = New clsParent
Set objChild1 = New clsChild
Set objChild1.Parent = objParent ' objChild1和下面的objChild2的Parent指向了同一个objParent
Set objChild2 = New clsChild
Set objChild2.Parent = objParent ' 至此对象实例objParent被引用了两次
...
Set objChild1.Parent = Nothing ' objParent还被objChild2.Parent引用不会销毁
Set objChild2.Parent = Nothing ' 至此objParent不再被引用会销毁
...
主动使用Nothing关键词取消对象变量对象实例的引用,从而可以尽早释放内存资源的占用!
- Empty 关键字用于给 Variant 变量赋值。Empty实际是Variant变量定义后的默认值,表示变量尚未被初始化。此时使用函数 IsEmpty 检测结果为True。此时如果参加数值运算被当作0,如果参加字符串运算被当作空串(即""),如果参加布尔条件运算被当作 False。假设现有定义为 Variant 类型且未赋值的变量 v(在**立即窗口**中进行验证)
? IsEmpty(v)
True
? v + 3
3
? v & "abc"
abc
? Not v ' 变量v参加布尔条件运算被当作False,取反操作后其值为-1(True的数值)
-1
- Null 关键字用于给 Variant 变量赋值,表示变量不包含任何有效数据。此时使用函数 IsNull 检测结果为True。
参考
关键字 (Visual Basic for Applications)https://docs.microsoft.com/zh-cn/office/vba/language/reference/keywords-visual-basic-for-applications
Nothing keywordhttps://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/nothing-keyword