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
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: