我想检查Variant的类型。可以使用TypeNameVarType来实现。我猜想使用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/

10-10 14:53