AW: Alle Fehler abfangen
01.09.2010 22:58:08
Josef
Hallo Steffen,
eine Möglichkeit.
Um an die Zeilennummer zu kommen, musst du alerdings auch Zeilennummern im Code verwenden.
Das Logfile wird im Benutzerverzeichnis erstellt.
' **********************************************************************
' Modul: bas_ErrorHandler Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Private Const cbln_errLogger As Boolean = True 'Log Errors On/Off
Private Const cbln_showError As Boolean = False 'Show Errormesage On/Off
Sub ErrorHandler_Error(ByRef ErrorObject As ErrObject, ByVal Procedurename As _
String, ByVal LineNumber As Long)
Dim strLoggFile As String, strErrMsg As String
Dim intFF As Integer
If cbln_showError Then
MsgBox "Prozedur:" & vbTab & Procedurename & vbLf & "Zeile:" & vbTab & _
LineNumber & vbLf & vbLf & "Fehlernummer:" & vbTab & ErrorObject.Number & _
vbLf & "Beschreibung:" & vbTab & ErrorObject.Description, vbExclamation, _
"Fehler in " & Procedurename
End If
If cbln_errLogger Then
strLoggFile = Environ("USERPROFILE") & "\" & Left(ThisWorkbook.Name, _
InStrRev(ThisWorkbook.Name, ".") - 1) & "_ERROR.log"
strErrMsg = "DATUM/ZEIT: " & Format(Now, "yyyy.MM.dd hh:mm:ss") & ";"
strErrMsg = strErrMsg & "BENUTZER: " & Environ("USERNAME") & ";"
strErrMsg = strErrMsg & "MODUL: " & Procedurename & ";" & LineNumber & ";"
strErrMsg = strErrMsg & "FEHLERNR.: " & ErrorObject.Number & ";"
strErrMsg = strErrMsg & "FEHLER: " & ErrorObject.Description & vbCrLf
intFF = FreeFile
Open strLoggFile For Append As #intFF
Print #intFF, strErrMsg;
Close #intFF
End If
End Sub
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Sub test1()
Dim l As Long
1 On Error GoTo ErrExit
2 l = 1 / 0
ErrExit:
3 If Err.Number Then
4 ErrorHandler_Error Err, "test1", Erl
5 End If
End Sub
Sub test2()
Dim i As Integer
1 On Error GoTo ErrExit
2 i = 10000 * 10000
ErrExit:
3 If Err.Number Then
4 ErrorHandler_Error Err, "test2", Erl
5 End If
End Sub
Gruß Sepp