2017-10-05 59 views
1

我正在通過一些vba代碼,並發現相當於下面的片段。如果是的話,If中的條件是否可以是真的?Can Variant參數可以變成vbError嗎?

Public Sub check(param As String) 
    If VarType(param) = vbError Then 
    ... 

如果param被定義爲是什麼如何Variant可以在param成爲一個錯誤?

Public Sub check2(param As Variant) 
    If VarType(param) = vbError Then 
    ... 

基礎上的意見,聲明可以簡化爲:

If IsError(param) Then 

回答

0

答案是否定的,只有Variant可以變成vbError。您可以使用CVErr函數創建錯誤。

Sub errorType() 
    Dim v As Variant 
    Dim s As String 

    On Error GoTo finish 
    v = CVErr(13) 

    Debug.Print VarType(v) = vbError 'True: Variant can become error 

    s = CVErr(13) 'Jumps to finish 
    Debug.Print "String can become error" 
    Exit Sub 
finish: 
    Debug.Print "String can't become error" 
End Sub 
1

vbError是一個枚舉。它等於10.如果VarType(參數)是10,那麼它將是真實的。

這裏是怎麼玩了一下,以使其與變工作:

Public Sub TestMe() 

    On Error Resume Next 

    Dim i As Variant 
    i = "a" 
    Debug.Print VarType(i + 2) 

    If VarType(i + 10) = vbError Then 
     Debug.Print "VarType equals vbError" 
    End If 

End Sub 
+1

它不回答'帕拉姆如何可以成爲一個error' –

+0

注意的是,在第一個例子'param'的類型是'String' – Roland

+1

@PankajJaju - 真的,我已編輯。 – Vityata

3

字符串是VarType函數8並固定到它,所以在你的第一個例子中,條件永遠是正確的。然而,第二個可能發生。如果你讀的細胞保持無效值的值(例如#VALUE)成一個變種,它會得到VarType函數10(vbError)

只是作爲一個例子:

Sub testVBError() 
With ActiveSheet 
    .Cells(1, 1) = 3 
    .Cells(1, 2) = 0 
    .Cells(1, 3).Formula = "=A1/B1" ' Divide by zero 
    Dim v As Variant 
    v = .Cells(1, 3).Value 
    Debug.Print VarType(v) 
End With 
End Sub 
+1

因此,不要像「IsError(param)」那樣簡單,OP的同事使用了'VarType(param)= vbError' ......我印象深刻! :) – Vityata

+2

我見過比在VBA代碼更糟糕的;-) – FunThomas

相關問題