我想检查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
最佳答案
我的建议
对于VarType
枚举覆盖的内置类型,请使用VbVarType
。将TypeName
用于其他类型。我将在下面详细解释该建议。
性能
性能差异几乎可以忽略不计,尤其是在使用VBA编写数据库应用程序的情况下。
变量类型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"
陷阱
请注意,如果变量包含具有默认属性的对象,则
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"
关于vba - TypeName vs VarType,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46580403/