我想检查一下的类型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)