在VBA中变量一般都是强类型的,即总声明成Integer,Long,Single,Double,String或Date等类型,这些强类型的值毋需考虑Empty、Null和Nothing。

有时我们需要定义一种能包含所有类型的变量,这种类型就是Variant,它是一种特殊的数据类型,可以包含数值、字符串或日期数据,还包含自定义 类型、对象(Object)和特殊数值Empty、Nothing和Null。对所有变量,如果没有明确声明它们是其它数据类型,则它们都变成 Variant 数据类型。因此Empty和Null只有对Variant变量才有意义。

对于Empty、Nothing和Null,你都要知道,他们都是值,可以赋给Variant变量

作为声明为Variant变量,如

 Dim vnt as Variant

vnt只进行了声明未赋值,其值就是Empty(由系统自动赋予),表示vnt只是声明了但尚未初始化(即尚未通过程序赋值)。这是因为Variant可以是任何类型的值,但在初始化前无法确定实际的类型而不能给出符合类型的形式(如数值型的0或字符串型的"")。

对于赋予Empty的Variant型变量,Empty是个有效数据(可以称为万能值),因为如果你认为这是数值型则值是0,认为是字符串型则值是""(空串)。所以以下的比较将是为真的

If vnt = 0 Then  或 if vnt = "" Then 或 If IsEmpty(vnt) Then

上面所述的数值、字符串或Empty都是有效数据,而当你将Null赋予vnt,如

 vnt = null

则表示vnt不包含有效数据。对于值为Null的数据只是通过IsNull函数来判断。那什么时候要用Null呢?比如对于性别,有效数据只能是男或女,但没填算什么,就是无效数据嘛!可以用Null来表示。

声明为Variant变量有一种叫对象变量。Nothing就是为对象变量赋值的,如

 Set vnt = Nothing

对象变量使用时总指向一个对象,对象需要占用较大的内存资源,用完应该尽快释放。将对象变量设为Nothing就是通知系统对象变量不再使用那个对象,当那个对象没有任何对象变量再使用它后,系统便会释放该对象所占的内存资源。

总结
----
Empty、Null和Nothing都可为Variant变量赋值,声明时系统会设Variant变量为Empty,如果要将Variant变量设为无效数据可用Null,如果不再使用对象变量就应尽快将之设成Nothing以利系统释放资源。