2017-10-05 2 views
1

Je passe en revue un code vba et j'ai trouvé l'équivalent du fragment suivant. Est-ce que la condition dans le If peut être vraie, si oui, comment?Est-ce que le paramètre non Variant peut devenir vbError?

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

si param a été défini comme Variant comment le devenir param une erreur?

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

Sur la base des commentaires, la déclaration pourrait être simplifiée:

If IsError(param) Then 

Répondre

0

La réponse est non, seulement Variant peut devenir vbError. Vous pouvez créer des erreurs avec la fonction 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 est un ENUM. Il est égal à 10. Si VarType (param) vaut 10, alors ce serait vrai.

Voici comment jouer un peu et de le faire fonctionner avec la variante:

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

Il ne répond pas 'comment le devenir error' param –

+0

Notez que le type de' param' dans le premier exemple est 'CHAINE' – Roland

+1

@PankajJaju - vrai, je l'ai édité. – Vityata

3

Une chaîne est VarType 8 et est fixé, donc la condition dans votre premier exemple ne peut jamais être vrai. La seconde peut toutefois se produire. Si vous lisez la valeur d'une cellule de détention d'une valeur non valide (par exemple #VALUE) dans une variante, il obtiendra le VarType 10 (vbError)

À titre d'exemple:

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

Donc, au lieu de faire quelque chose d'aussi simple que 'IsError (param)', le collègue de l'OP a utilisé 'VarType (param) = vbError' ... Je suis impressionné! :) – Vityata

+2

J'ai vu beaucoup pire que cela dans le code VBA ;-) – FunThomas