Clever-Excel-Forum

Normale Version: Fehler Funktion
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo, ich habe mir ein kleines Tool gebaut, was auch bei vielen Test funktioniert, aber kaum lässt man die Familie dran, stürzt es ab......

Da ich nicht immer zu Hause bin um es mir dann direkt im Debug anzusehen, hatte ich jetzt die idee ob ich mir bei einem Error nicht irgendwie einen Fehlerbericht erstellen kann, allerdings bin ich bei google leider nicht so richtig fündig geworden was das erstellen von Fehlerberichten in VBA angeht, die meistens Beiträge gehen immer um das Fehler verhindern(was ja auch grundsätzlich richtig ist).

Ich hatte an so etwas in der Art von

Code:
on error goto Fehler

und dann eine kleine Prozedur welche denn FehlerCode der auch im Debug Fenster angezeigt wird dann in eine Datei scheibt, ideal wäre ja aber wahrscheinlich auch noch die Aktion die ausgeführt wurde vorm Fehler zu erfassen, aber dazu fehlt mir eine idee.

Hat sowas in der Art schon mal einer gemacht oder eine idee wie ich das machen könnte.

Danke
Moin,

schau mal hier:

Errorhandling VBA
Zitat:ein kleines Tool

Dann wäre es besser das 'Tool' mehr robust zu machen. Das spart viiel mehr Zeit als 'error handling'.
Eine schnelle Fingerübung als Basis:

Code:
Option Explicit

Sub test()
On Error GoTo errExit

Dim x As Long
1 x = 1 / 0

Aufräumen:
Exit Sub

errExit:
Call ErrLog(Ex:=Err, Procedure:="Modul1.Test", ErrLine:=Erl)
Resume Aufräumen
End Sub



Private Function ErrLog(ByRef Ex As ErrObject, ByVal Procedure As String, Optional ErrLine As Long = -1)
 
Dim sErrText As String
sErrText = ThisWorkbook.Name & vbLf & _
            "Fehler in Prozedur: '" & Procedure & "'" & vbLf & _
            "Fehlerzeile: " & IIf(ErrLine > -1, ErrLine, "unbekannt") & vbLf & _
            "Fehlernummer: " & Ex.Number & vbLf & _
            "Fehlerbeschreibung: " & Ex.Description

Dim sDatnam As String: sDatnam = ThisWorkbook.Path & "\" & Format(Now, "YYYY-MM-DD hh.nn.ss") & "_ErrLog.txt"

Dim lngFileNr As Long: lngFileNr = FreeFile
Open sDatnam For Output As #lngFileNr
Print #lngFileNr, sErrText;
Close #lngFileNr

ErrLog = (Err = 0)
End Function

Dass Fehler, die nicht entstehen, die besten sind, muss ich sicher nicht betonen. ;)
Hallo auch von mir,

schau vielleicht auch mal bei Brian Satola vorbei, der hat eine Logging-Klasse veröffentlicht: https://chejunkie.com/knowledge-base/log...class-vba/
Dort findest du auch eine ApplicationError-Klasse

Viele Grüße
derHöpp
(28.10.2022, 09:01)EarlFred schrieb: [ -> ]Eine schnelle Fingerübung als Basis:

Code:
[...]
Private Function ErrLog(ByRef Ex As ErrObject, ByVal Procedure As String, Optional ErrLine As Long = -1)
 
Dim sErrText As String
sErrText = ThisWorkbook.Name & vbLf & _
            "Fehler in Prozedur: '" & Procedure & "'" & vbLf & _
            "Fehlerzeile: " & IIf(ErrLine > -1, ErrLine, "unbekannt") & vbLf & _
            "Fehlernummer: " & Ex.Number & vbLf & _
            "Fehlerbeschreibung: " & Ex.Description

Dim sDatnam As String: sDatnam = ThisWorkbook.Path & "\" & Format(Now, "YYYY-MM-DD hh.nn.ss") & "_ErrLog.txt"

Schöne Fingerübung, kleine Anmerkung: muss im Formatierungsstring (letzte Zeile meines Zitats) nicht stehen "YYYY-MM-DD hh.mm.ss"?

Gruß,
RaiSta
Zitat:Schöne Fingerübung, kleine Anmerkung: muss im Formatierungsstring (letzte Zeile meines Zitats) nicht stehen "YYYY-MM-DD hh.mm.ss"?
Musste deine Frage erst in meinem Zitat suchen ;)

Gegenfrage: Weicht das Ergebnis denn von den Erwartungen ab?

Ein Blick in die Dokumentation offenbart:
Da die Stundenangabe voransteht, kann "mm" stehen, andernfalls muss "nn" stehen. Steht die Stundenangabe davor, ist es folglich wurscht.
... und da das unnötige Komplexität bedeutet, merkt man sich einfach, dass man in VBA "nn" nimmt. Smile
(28.10.2022, 08:45)Stoffo schrieb: [ -> ]Moin,

schau mal hier:

Errorhandling VBA

Hi Stoffo.
hab mir das mal durchgelesen, wenn ich es dann richtig verstehe, dann dürften ja die beiden folgenden Werte ggf. das wiedergeben was ich suche, was ich mir dann auch Mail aus VBA heraus schicken kann.

Code:
  On Error GoTo xxxx
xxxx:
     Err.Description
     Err.Number
     Err.source

Oder würden mir dann noch informationen fehlen? 
Kann man das auch "Global" einbauen oder muss das in jeder Prozedur seperat eingefügt werden?
Was ich auch noch nicht so wirklich verstanden habe ist, was ist 
  • Err.Raise
  • vbObjectError
(28.10.2022, 08:53)snb schrieb: [ -> ]Dann wäre es besser das 'Tool' mehr robust zu machen. Das spart viiel mehr Zeit als 'error handling'.

Zweifels ohne ist das Fehler vermeiden die bessere wahl und ich hatte auch gedacht/gehofft ich hätte alles dafür getan, wurde aber eines besseren beleehrt, daher such ich nun an einer möglichkeit das ich die Fehler wenigstens "Reporte" um sie dann zu korrigieren

(28.10.2022, 09:01)EarlFred schrieb: [ -> ]Eine schnelle Fingerübung als Basis:

Code:
Option Explicit

Sub test()
On Error GoTo errExit

Dim x As Long
1 x = 1 / 0

Aufräumen:
Exit Sub

errExit:
Call ErrLog(Ex:=Err, Procedure:="Modul1.Test", ErrLine:=Erl)
Resume Aufräumen
End Sub



Private Function ErrLog(ByRef Ex As ErrObject, ByVal Procedure As String, Optional ErrLine As Long = -1)
 
Dim sErrText As String
sErrText = ThisWorkbook.Name & vbLf & _
            "Fehler in Prozedur: '" & Procedure & "'" & vbLf & _
            "Fehlerzeile: " & IIf(ErrLine > -1, ErrLine, "unbekannt") & vbLf & _
            "Fehlernummer: " & Ex.Number & vbLf & _
            "Fehlerbeschreibung: " & Ex.Description

Dim sDatnam As String: sDatnam = ThisWorkbook.Path & "\" & Format(Now, "YYYY-MM-DD hh.nn.ss") & "_ErrLog.txt"

Dim lngFileNr As Long: lngFileNr = FreeFile
Open sDatnam For Output As #lngFileNr
Print #lngFileNr, sErrText;
Close #lngFileNr

ErrLog = (Err = 0)
End Function

Dass Fehler, die nicht entstehen, die besten sind, muss ich sicher nicht betonen. ;)

Das ist schon ziemlich geil.Smile         
versteh den Code zwar noch nicht komplett..aber es macht schon zum großen teil das was ich mir vorstelle.
Kann man noch irgendwie abfragen was vor dem Fehler passiert ist, z.b. wenn was in einem Userform angeklickt wurde z.b.

Vielen Dank

(28.10.2022, 10:02)derHoepp schrieb: [ -> ]Hallo auch von mir,

schau vielleicht auch mal bei Brian Satola vorbei, der hat eine Logging-Klasse veröffentlicht: https://chejunkie.com/knowledge-base/log...class-vba/
Dort findest du auch eine ApplicationError-Klasse

Viele Grüße
derHöpp

Hi,
danke für den Tip,
das sieht ziemlich cool aus, allerdings ist das definitiv noch eine (eher mehrere) Nummern zu hoch für mich, da fehlte mir grade jeder Ansatz wie ich das bei mir einbauen könnte/müsste, aber gut zu sehen was alles gehen könnte wenn man Ahnung hatSmile
Ansatz: Verstehe den Code nicht nur fast, sondern vollständig. Das ist ja kein Hexenwerk und wenn du an einer Stelle Hilfe brauchst, dann stelle konkrete Fragen dazu. 
Sobald du den Code verstanden hast, erübrigt sich vermutlich auch deine Frage. Oder du müsstest deine Frage präzisieren.
Seiten: 1 2 3