VBA obsługa błędów – Jak sobie radzić z błędami

1. VBA Obsługa błędów – Jak z niej korzystać?

W tym artykule dowiesz się czym jest obsługa błędów VBA i jak z niej efektywnie korzystać. W języku VBA jak w każdym innym podczas pisania programów pojawiają się błędy. Mogą wynikać m. in. z nieprawidłowej składni lub logiki programu. Błędy, które mogą wystąpić w VBA możemy podzielić na:

  • Błędy składniowe
  • Błędy logiczne
  • Błędy czasu wykonywania programu tzw. Runtime Errors
  • Błędy obiektów

Każdy z powyższych błędów można odpowiednio zdiagnozować i obsłużyć w kodzie VBA. Możemy znaleźć numer błędu oraz jego opis.

2. Obsługa błędów VBA – Error Handling

Obsługa błędów w VBA polega głównie na napisaniu tzw. Handlera, a więc kodu wywołującego określoną akcję po wystąpieniu błędu. Jak napisać taki program? Składnia kodu obsługi błędów opisana jest poniżej:

'tomaszkenig.pl
On Error { GoTo [ line | 0 | -1 ] | Resume Next }

2.1. Resume Next – Wprowadzając np na początku programu kod On Error Resume Next, nakazujemy VB ignorować wszystkie błędy. Tak więc, gdy błąd wystąpi, program go pominie i przejdzie do kolejnej linii kodu. Wbrew pozorom jest to instrukcja bardzo użyteczna np przy tworzeniu automatycznych raportów.

'tomaszkenig.pl
Sub ObslugaBledow1()
On Error Resume Next

'typowy blad - dzielenie przez zero
MsgBox 1 / 0
MsgBox "Koniec Programu"

End Sub

2.2 GoTo Line – To właśnie te polecenie służy do odniesienia się do tzw. Handlera. W momencie wystąpienia błędu, program za pomocą instrukcji VBA GoTo przeskakuje do bloku kodu, w którym opisane są np szczegóły błędu. Możemy tutaj przy pomocy funkcji Err określić numer błędu, opis błędu, odniesienie do właściwego punktu w pliku pomocy. Po obsłudze błędu możemy go wyczyścić za pomocą polecenia Err.Clear. Konkretny przykład obsługi błędu za pomocą handlera zamieszczam poniżej:

'tomaszkenig.pl
Sub ObslugaBledow2()
On Error GoTo Error_handler

'typowy blad - dzielenie przez zero
MsgBox 1 / 0

MsgBox "Koniec Programu"

Error_handler:
MsgBox "Wystapił bląd programu" & vbCrLf _
& "Numer błędu: " & Err.Number & vbCrLf _
& "Opis błędu: " & Err.Description & vbCrLf _
& "Plik pomocy: " & Err.HelpFile & vbCrLf _
& "Numer błędu w pliku pomocy: " & Err.HelpContext & vbCrLf _
& "Źrodło: " & Err.Source
Err.Clear

End Sub
Kurs Excel VBA - Obsługa błędów vba
Kurs Excel VBA – Obsługa błędów vba

2.3 GoTo 0 – wyłącza obsługę błędów przez Handlera. Przykładowo część naszego kodu powinna być obsłużona Handlerem, a inna część nie. Za pomocą instrukcji On Error GoTo 0 wyłączamy wcześniej zadeklarowaną obsługę błędów. Poniżej przykład. W pierwszym przypadku błąd dzielenia przez zero został obsłużony przez Handler, w drugim nie.

'tomaszkenig.pl
Sub ObslugaBledow3()
On Error GoTo Error_handler

'typowy blad - dzielenie przez zero
MsgBox 1 / 0

MsgBox "Koniec Programu"

Error_handler:
MsgBox "Wystapil blad programu"
Err.Clear

On Error GoTo 0
Debug.Print 1 / 0

End Sub

Artykuł jest częścią kursu vba Excel. Całość kursu znajdziesz pod tym linkiem: Kurs VBA. Poniżej zamieszczam plik z kodem programu:

Kurs_excel_vba_obsluga_bledow.xlsm

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *