Visual Basic for Applications:
Obsługa błędów

Jak to zrobić:

W VBA obsługa błędów jest zazwyczaj implementowana za pomocą instrukcji On Error, która instruuje VBA, jak postępować w przypadku wystąpienia błędu. Najczęstsze strategie obsługi błędów obejmują On Error GoTo etykieta, On Error Resume Next, oraz On Error GoTo 0.

Przykład 1: Użycie On Error GoTo

To podejście pozwala skierować program do określonej sekcji kodu, oznaczonej od razu po napotkaniu błędu.

Sub ErrorHandlerExample()
    On Error GoTo ErrHandler
    Dim intDivision As Integer

    intDivision = 5 / 0 ' To spowoduje błąd dzielenia przez zero

    Exit Sub
ErrHandler:
    MsgBox "Wystąpił błąd: " & Err.Description, vbCritical, "Błąd!"
    Resume Next
End Sub

W tym przykładzie, każdy błąd wykonania spowoduje skok do ErrHandler, wyświetlenie komunikatu o błędzie, a następnie kontynuowanie z kolejną linią po błędzie.

Przykład 2: Użycie On Error Resume Next

Ta strategia instruuje VBA, aby kontynuowało wykonanie następnej linii kodu nawet jeśli wystąpi błąd, co może być przydatne dla błędów spodziewanych jako nieszkodliwe lub gdy planujesz obsłużyć błąd później w wykonaniu programu.

Sub ResumeNextExample()
    On Error Resume Next
    Dim intDivision As Integer
    intDivision = 5 / 0 ' To nie spowoduje zatrzymania programu; błąd jest ignorowany
    
    ' Sprawdź, czy wystąpił błąd
    If Err.Number <> 0 Then
        MsgBox "Wystąpił błąd: " & Err.Description, vbExclamation, "Obsłużony Błąd"
        ' Zresetuj błąd
        Err.Clear
    End If
End Sub

W tym przypadku, program nie przerywa działania na błędzie; sprawdza, czy wystąpił błąd, obsługuje go, jeśli wystąpił, a następnie czyści błąd.

Wnikliwie

Historycznie obsługa błędów w językach programowania ewoluowała od prostych instrukcji goto do bardziej zaawansowanych mechanizmów, takich jak wyjątki w językach takich jak Java i C#. Obsługa błędów w VBA, choć nie jest tak potężna czy elastyczna jak nowoczesne mechanizmy obsługi wyjątków, spełnia swoje zadanie w kontekście zastosowania języka do automatyzacji zadań w środowiskach Microsoft Office.

Podstawową ograniczeniem obsługi błędów w VBA jest jej nieco toporna i ręczna metoda, wymagająca ostrożnego umieszczania kodu obsługi błędów i jasnego zrozumienia przepływu wykonania. Nowoczesne języki programowania zazwyczaj oferują bardziej eleganckie rozwiązania, takie jak bloki try-catch, które automatycznie zarządzają przepływem do kodu obsługi błędów bez potrzeby ręcznych sprawdzeń lub skoków w wykonaniu kodu.

Pomimo tych ograniczeń, mechanizmy obsługi błędów w VBA są odpowiednie dla większości zadań automatyzacji i, gdy są prawidłowo używane, mogą znacząco zmniejszyć prawdopodobieństwo wystąpienia nieobsłużonych błędów, które mogą sprawiać problemy użytkownikom. Ponadto, zrozumienie obsługi błędów w VBA może dostarczyć wglądu w starsze paradygmaty programowania i ewolucję strategii obsługi błędów w rozwoju oprogramowania.