Globalna obsługa błędów

Od jakiegoś czasu szukałem w internecie oraz swoich projektach rozwiązania dla globalnej obsługi błędów – prawdopodobnie VBA nie przewiduje takiego rozwiązania. Dlatego też napisałem namiastkę globalnej obsługi błędów.

Kiedy piszę kod aplikacji staram się, aby w projekcie znajdował się główny kod z odnogami do innych procedur. Do kodu dodaje zmienną ErrorStatus, aby sprawdzać czy błąd pojawił się innych procedurach. Jeżeli zmienna ErrorStatus nie zostanie użyta i unikalne numery wierszy zostaną dodane do modułu – kiedy pojawi się błąd VBA zwróci linię błędu głównej procedury.

Przykład globalnej obsługi błędów:

' Ten prosty kod pokazuje jak działa globalna obsługa błędów w module/projekcie
' Numery wierszy są uniklane dla całego modułu
' Kiedy pojawia się błąd kod zwraca numer wiersza, nazwę modułu i procedury

Public ErrorMessage, ErrorStatus, ErlLine, ModName, ProcName

Public Sub MainMacro()

Dim i, a, s As Long

1   On Error GoTo ErrorMessage
2   ModName = "Module1"
3   ProcName = "MainMacro"
4   i = 1
5   a = 2

6   Macro1 'przywoływanie innej procedury
7   If ErrorStatus = True Then
8       GoTo ErrorMessage
9   End If

10  Macro2 'przywoływanie innej procedury
11  If ErrorStatus = True Then
12      GoTo ErrorMessage
13  End If

14  s = 3
15  Exit Sub

ErrorMessage:

16  If Erl <> 0 Then
17      Debug.Print "Code Line: " & Erl & Chr(10) & "Module: " & ModName & Chr(10) & "Procedure: " & ProcName
18  Else
19      Debug.Print "Code Line: " & ErlLine & Chr(10) & "Module: " & ModName & Chr(10) & "Procedure: " & ProcName
20  End If

End Sub

Private Sub Macro1()
' W tej procedurze nie ma błedów

Dim i, a, x As Long

21  On Error GoTo ErrorMessage
22  ProcName = "Macro1"
23  i = 2
24  a = 2
25  x = i * a
26 Exit Sub

ErrorMessage:

27  ErrorStatus = True
28  ErlLine = Erl

End Sub

Private Sub Macro2()
' W tej procedurze jest błąd

Dim i, x As Long
Dim a As String

29  On Error GoTo ErrorMessage
30  ProcName = "Macro2"
31  i = 2
32  a = "dd"
33  x = i * a 'mnożenie zmiennej long z string
34  Exit Sub

ErrorMessage:

35  ErrorStatus = True
36  ErlLine = Erl

End Sub

1 myśl w temacie “Globalna obsługa błędów

  1. Dobrze jest jeszcze dodać zmienną ErrOpis, która przy błędzie będzie zapisywała err.description.
    Takie same rozwiązanie jak ErlLine.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.