VBA - obsługa błędów
Istnieją trzy rodzaje błędów w programowaniu: (a) błędy składniowe, (b) błędy czasu wykonania i (c) błędy logiczne.
Błędy składniowe
Błędy składniowe, nazywane również błędami analizy, występują w czasie interpretacji języka VBScript. Na przykład poniższy wiersz powoduje błąd składniowy, ponieważ brakuje w nim nawiasu zamykającego.
Function ErrorHanlding_Demo()
dim x,y
x = "Tutorialspoint"
y = Ucase(x
End Function
Błędy czasu wykonywania
Błędy czasu wykonania, zwane również wyjątkami, występują podczas wykonywania, po interpretacji.
Na przykład następujący wiersz powoduje błąd w czasie wykonywania, ponieważ tutaj składnia jest poprawna, ale w czasie wykonywania program próbuje wywołać funkcję fnmultiply, która jest nieistniejącą funkcją.
Function ErrorHanlding_Demo1()
Dim x,y
x = 10
y = 20
z = fnadd(x,y)
a = fnmultiply(x,y)
End Function
Function fnadd(x,y)
fnadd = x + y
End Function
Błędy logiczne
Błędy logiczne mogą być najtrudniejszym do wyśledzenia rodzajem błędów. Te błędy nie są wynikiem błędu składni ani błędu wykonania. Zamiast tego pojawiają się, gdy popełnisz błąd w logice, która kieruje Twoim skryptem, i nie uzyskasz oczekiwanego wyniku.
Nie możesz wychwycić tych błędów, ponieważ od wymagań biznesowych zależy, jaki typ logiki chcesz umieścić w programie.
Na przykład podzielenie liczby przez zero lub napisany skrypt, który wchodzi w nieskończoną pętlę.
Err Object
Załóżmy, że jeśli wystąpi błąd w czasie wykonywania, wykonanie zatrzymuje się, wyświetlając komunikat o błędzie. Jako programista, jeśli chcemy uchwycić błąd, toError Obiekt jest używany.
Przykład
W poniższym przykładzie Err.Number podaje numer błędu i Err.Description podaje opis błędu.
Err.Raise 6 ' Raise an overflow error.
MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear ' Clear the error.
Obsługa błędów
VBA włącza procedurę obsługi błędów i może być również używany do wyłączania procedury obsługi błędów. Bez instrukcji On Error każdy błąd czasu wykonywania, który wystąpi, jest krytyczny: wyświetlany jest komunikat o błędzie, a wykonywanie nagle zatrzymuje się.
On Error { GoTo [ line | 0 | -1 ] | Resume Next }
Sr.No. | Słowo kluczowe i opis |
---|---|
1 | GoTo line Włącza procedurę obsługi błędów, która rozpoczyna się w wierszu określonym w wymaganym argumencie wiersza. Określony wiersz musi znajdować się w tej samej procedurze co instrukcja On Error, w przeciwnym razie wystąpi błąd w czasie kompilacji. |
2 | GoTo 0 Wyłącza włączoną procedurę obsługi błędów w bieżącej procedurze i resetuje ją do Nothing. |
3 | GoTo -1 Wyłącza włączony wyjątek w bieżącej procedurze i resetuje go do Nothing. |
4 | Resume Next Określa, że w przypadku wystąpienia błędu czasu wykonywania formant przechodzi do instrukcji bezpośrednio po instrukcji, w której wystąpił błąd, i wykonywanie jest kontynuowane od tego momentu. |
Przykład
Public Sub OnErrorDemo()
On Error GoTo ErrorHandler ' Enable error-handling routine.
Dim x, y, z As Integer
x = 50
y = 0
z = x / y ' Divide by ZERO Error Raises
ErrorHandler: ' Error-handling routine.
Select Case Err.Number ' Evaluate error number.
Case 10 ' Divide by zero error
MsgBox ("You attempted to divide by zero!")
Case Else
MsgBox "UNKNOWN ERROR - Error# " & Err.Number & " : " & Err.Description
End Select
Resume Next
End Sub