Registriert seit: 27.09.2022
Version(en): 365
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
Registriert seit: 23.07.2019
Version(en): 2016
Moin, schau mal hier: Errorhandling VBA
Gruß
Stoffo
Folgende(r) 1 Nutzer sagt Danke an Stoffo für diesen Beitrag:1 Nutzer sagt Danke an Stoffo für diesen Beitrag 28
• Mila
Registriert seit: 29.09.2015
Version(en): 2030,5
Zitat:ein kleines Tool Dann wäre es besser das 'Tool' mehr robust zu machen. Das spart viiel mehr Zeit als 'error handling'.
Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:1 Nutzer sagt Danke an snb für diesen Beitrag 28
• Mila
26865
Nicht registrierter Gast
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. ;)
Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:1 Nutzer sagt Danke an Gast für diesen Beitrag 28
• Mila
Registriert seit: 26.09.2022
Version(en): 2019
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
Folgende(r) 1 Nutzer sagt Danke an derHoepp für diesen Beitrag:1 Nutzer sagt Danke an derHoepp für diesen Beitrag 28
• Mila
Registriert seit: 15.10.2020
Version(en): Office365
28.10.2022, 11:19
(Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2022, 11:19 von RaiSta.)
(28.10.2022, 10: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
26865
Nicht registrierter Gast
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.
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
... und da das unnötige Komplexität bedeutet, merkt man sich einfach, dass man in VBA "nn" nimmt.
Registriert seit: 27.09.2022
Version(en): 365
01.11.2022, 20:33
(Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2022, 20:54 von Mila.)
(28.10.2022, 09: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 (28.10.2022, 09: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, 10: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. 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, 11: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 hat
26865
Nicht registrierter Gast
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.
|