环境

  • 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