Obsługa błędów

W poniższym przykładzie może się okazać, że wystąpi jakiś błąd, który przerwie wykonywanie makra. Przykładowo chcemy skasować plik, który nie istnieje lub chcemy skasowac plik z folderu do którego nie mamy uprawnień, albo drugi raz chcemy utworzyć folder, który już istnieje. Dlatego Warto jest włączyć obsługę błędów. Można to zrobić na dwa sposoby:

Sposób #1: Specjalny fragment kodu, który zostanie wykonany, gdy wystąpi błąd

Sub KasujPlik(Plik As String)
    On Error GoTo Err
    
    Kill (Plik)

    Exit Sub
Err:
    MsgBox "Nie mogłem skasować pliku" & Plik, vbExclamation

End Sub

Dwa słowa wyjaśnienia: w swoich makrach nigdy nie używam „na pałę” instrukcji Kill, gdyż błąd mógłby niespodziewanie przerwać wykonanie makra. Piszę swoją procedurę do kasowania pliku, która zawiera instrukcję Kill, ale moja procedura posiada obsługę błędów.

W pierwszej linijce mówię, że jeśli wystapi błąd to interpreter języka VBA ma przejść do etykiety Err (linia zaczynająca się od Err: ). Tam piszę własny kod obsługi błędu (np. wyświetlam użytkownikowi komunikat i kończe działanie programu, albo próbuję np. utworzyć plik który nie istnieje z wpisanymi domyślnymi wartościami, albo po prostu nic nie robię).

Natomiast jeśli błąd nie wystąpi (uda się skasować plik) to tuż przed etykietą Err znajduje sięinstrukcja Exit Sub która mówi, że w tym miejscu jest koniec tej procedury (interpreter języka VBA wraca do procedury nadrzędnej, która tę procedurę wykonała lub kończy działanie makra).

Uwaga: instrukcja on error działa tylko wewnątrz danej procedury. Jeśli kilka procedur może wykonywać operacje na skutek których może nastąpić błąd, należy każdą procedurę uzbroić w obsługę błędów.

Sposób #2: Ignorowanie wszystkich błędów (w danej procedurze)

Na początku procedury można dodać instrukcje On Error Resume Next. Procedura normalnie będzie się wykonywała a wszelkie błędy będą systematycznie ignorowane