2017-10-05 56 views
3

我想檢查一個Variant的類型。可以用TypeNameVarType來完成。我猜想使用VarType會更高效,因爲它不涉及字符串比較,只是數字比較。喜歡TypeName的任何理由?TypeName與VarType

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 

回答

4

我的建議

使用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" 
+0

你錯過了一個事實,即'VarType函數(對象)'返回對象的默認屬性的類型,如果有的話,而'類型名(對象)'返回名稱的對象。 –

+0

@FlorentB .:謝謝,我其實不知道!我已將它添加到我的答案中(包括回購示例)。 – Heinzi

相關問題