我想检查一下的类型Variant
.可以用TypeName
和来做VarType
.我猜使用VarType
效率更高,因为它不涉及字符串比较,只是数字比较.有什么理由喜欢TypeName
?
Public Sub testType()
Dim b() As Double
Dim a As Variant
a = b
Debug.Print TypeName(a) = "Double()" 'True
Debug.Print VarType(a) = vbArray + vbDouble 'True
End Sub
Run Code Online (Sandbox Code Playgroud)
我的推荐
使用VarType
由覆盖内置类型VbVarType
枚举.使用TypeName
其他类型的.我将在下面详细解释这个建议.
性能
性能差异很可能是微不足道的,特别是如果您使用VBA编写数据库应用程序.
VarType函数
它的最大优点VarType
是它不使用魔术字符串:如果你拼错vbDouble
,你会得到一个编译时错误(假设你使用Option Explicit
,你应该这样做).如果你拼错了"Double()"
,你的代码就会默默地做错事.
类型名
它的优点TypeName
是它也适用于VbVarType
枚举未涵盖的类型:
Dim b As New Collection
Dim a As Variant
Set a = b
Debug.Print VarType(a) ' Prints just the generic vbObject constant
Debug.Print TypeName(a) ' Prints "Collection"
Run Code Online (Sandbox Code Playgroud)
陷阱
请注意,如果变量包含具有默认属性的对象,则VarType
返回默认属性中包含的值的类型,而不是vbObject
.以下是使用MS Access VBA的TempVar类的示例:
TempVars("x") = 123
Dim a As Variant
Set a = TempVars("x")
Debug.Print VarType(a) ' Prints vbInteger, the type of a.Value's current content.
' (Value is TempVar's default property)
Debug.Print TypeName(a) ' Prints "TempVar"
Run Code Online (Sandbox Code Playgroud)