我的建議
使用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"
陷阱
注意,如果變量包含默認屬性,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"
你錯過了一個事實,即'VarType函數(對象)'返回對象的默認屬性的類型,如果有的話,而'類型名(對象)'返回名稱的對象。 –
@FlorentB .:謝謝,我其實不知道!我已將它添加到我的答案中(包括回購示例)。 – Heinzi