
VBA中的Variant变量类型绝对是“神一般存在”!任何其他类型的变量都可以归到此类,integer、boolean、string甚至数组、对象等都可直接扔给此类型所定义的变量来接收。这,颇有些“海纳百川”的味道!

上例展示了“这片大海”的“超强容量”,各类变量、对象的值均可赋给Variant变量(注意对象赋值需用Set关键字)。Variant类型的这种“全能”属性是由于其庞大的内存空间所决定,如下表其容量16字节远超过其他类型(如:integer 2字节,double 8字节)变量所占空间。超大的空间保证其他变量传值时不会造成数据溢出。

另外Variant类型变量的声明也非常简单:正常写法与普通变量声明一样,使用“Dim 变量名 As Variant”的模式,由于Variant类型是VBA变量声明的的默认类型,故直接简写为“Dim 变量名”也可完成Variant类型的声明。如果代码区无“Option Explicit”强制声明监控,甚至可以不用声明,变量可直接“拿来”使用(不推荐)。

其实,从某种意义上讲,Variant并不是变量类型,其类型是依照所附值类型而定。就像新人应聘进入公司并没有确切职务,待有任务来才安排,并依照被安排的任务性质确定其职务性质,承接了设计工作此人就是设计师,若承接了财务工作则有可能就叫“会计”。很明显,新人必须是全能型的,需有足够的学识才行(对应于Variant型的大容量)。我们可以借助TypeName函数(typeName函数接收变量名,返回此变量类型)说明这个问题,下面例子除Variant类型变量会返回Empty(空值)外,其它均准确返回声明时所“归入”的类型。这也说明确实不存在“Variant”这样的类型。

同样,针对Variant赋值后的类型则可以准确被输出(如下图)

Variant兼容性强且申明方便,绝对是新手和懒人的福音,但其浪费电脑空间和处理时间也是不争的事实。不过我们平时的工作需求只是些简单功能的代码,变量需求并不多,这时这个小小的缺点完全可以忽略了。