TypeName vs VarType

Rol*_*and 4 vba types

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

Hei*_*nzi 6

我的推荐

使用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)

  • 您忽略了这样一个事实:“VarType(object)”返回对象默认属性的类型(如果有),而“TypeName(object)”返回对象的名称。 (2认同)