headerbanner

VBA - ošetření chyby při testu

Error handling (VBA Excel)

 Při testování proměnné je možné zachytit chybu vznikající neexistencí proměnné takto:

On Error Resume Next
If Sheets("List1").novar = "" Then
    If Err.Number > 0 Then
        '1
        On Error GoTo 0
        Debug.Print "chyba"
        Err.Clear
    Else
        '2
        On Error GoTo 0
        Debug.Print "podmínka platí"
    End If
Else
    '3
    On Error GoTo 0
    Debug.Print "podmínka neplatí"
End If

Nebo třeba takto:

On Error Resume Next
If Sheets("List1").novar = "" And False Then
    '1 - díky "And False" se vykoná jen při chybě
    On Error GoTo 0
    Debug.Print "chyba"
    Err.Clear
ElseIf Sheets("List1").novar = "" Then
    '2
    On Error GoTo 0
    Debug.Print "podmínka platí"
Else
    '3
    On Error GoTo 0
    Debug.Print "podmínka neplatí"
End If

Druhý způsob ušetří dva řádky. Není to určitě zásadní, ale druhý případ se mi zdá přehlednější, sekce 1, 2 i 3 jsou na stejné úrovni. Je to založené na faktu, že podmínkou s "and false" může projít program jedině tehdy, pokud je deklarován pokyn k pokračování po chybě dalším řádkem  On error resume next a když se zároveň vyskytne chyba.