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