Zentrale Fehlerbehandlungsroutine
07.02.2008 08:37:00
Roland
Zur Fehlerbehandlung eines umfangreicheren VBA-Projektes möchte ich Laufzeitfehler über eine eigene Fehlerbehandlungsroutine in einer MsgBox ausgeben und dadurch insbesondere das Debugging unterbinden. Neben Fehlernummer und Beschreibung möchte ich zudem auch den Procedure-/Function-Namen, in der der Fehler aufgetreten ist, ausgeben.
Die Fehlerfuntion selbst möchte ich als eigenes Sub definieren und in zahlreichen anderen Prozeduren/Funktionen über das "On Error [...]" Konstrukt aufrufen.
Jetzt die eigentlichen Fragen:
1. Klappt das mit dem Auslagern der Fehlerbehandlung in eine eigene Procedure überhaupt?
2. Kann ich in einer Procedure den Namen der Procedure/Fuction ermitteln, von der aus diese aufgerufen wurde? (Bei mehrfach verschachtelten Aufrufen wäre die gesamt Hierarchie nett, aber nicht zwingend nötig).
3. Ich habe bei meinen Recherchen noch keine Quelle gefunden, die sich intensiver mit Fehlerbehandlung befasst. Kennt jemand brauchbare URLs? Ich bin dabei auch immer auf der Suche nach Code-Beispielen statt nur abstrakter Beschreibungen (die Theorie kenn ich schon).
Sofern ich nichts eleganteres finde, habe ich mir folgende Lösung überlegt:
Sub ErrHandler (ErrNumber As Integer, ErrDescription As String, _
CallerID As String, optional HelpTxt As String)
Dim MsgText As String
Dim result As Variant
MsgText = "In der Anwendung ist ein Laufzeitfehler aufgetreten." + vbNewLine
MsgText = MsgText + " Fehlernummer: " + str(ErrNumber) + vbNewLine
MsgText = MsgText + " Fehlertext: " + ErrDescription + vbNewLine
If HelpTxt Then
MsgText = MsgText + vbNewLine + HelpTxt
End If
result = MsgBox(MsgText, vbCritical, "Anwendungsfehler")
End Sub ' ErrHandler
Diese Fehlerbehandlungsroutine würde ich dann so aus einer anderen Routine aufrufen:
Sub ErrorTest ()
On Error Goto HandleError
[ Code ]
Exit Sub
HandleError:
Call ErrHandler(Err.Number, Err.Description, "ErrorTest", _
"Bitte kontaktieren Sie Ihren Admin.")
Resume Next
End Sub
Wie ist Eure Meinung?
Gruß,
Roland