Anzeige
Archiv - Navigation
996to1000
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA erkennt errors.count nicht

VBA erkennt errors.count nicht
04.08.2008 15:23:35
Meier
Hi,
ich komme eigentlich aus der MS Access Welt.
Henry Habermacher hat für Access ein paar geniale Funktionen entworfen, um die Zeilen des VBA Code zu nummerieren. Damit kann man dann eine super Fehlerbehandlung einbauen, die er auch gleich mitliefert.
Naiv wie ich so bin, dachte ich mir, die VBA-Module von Access einfach in Excel zu importieren.
Aber so ganz scheint das nicht zu klappen.
Bei folgendem Code-Schnipsel sagt mir Excel beim Kompilieren:
"Variable nicht definierit" und markiert das Wort "Errors" in der Klammer von Zeile 14.
Aber es gibt doch das "Errors"-Objekt auch in Excel ...
Weiß jemand, wie ich das Code-Schnipsel umschreiben muss, damit es funktioniert?
Danke, Gruß Jörg
''14 If Errors(Errors.Count - 1).Number = Err.Number Then
'15 ReDim Preserve errSave(0 To Errors.Count - 1)
'16 For I = Errors.Count - 1 To 0 Step -1
'17 With errSave(I)
'18 .Nbr = Errors(I).Number
'19 .Dsc = Errors(I).Description
'20 .Src = Errors(I).Source
'21 End With
'22 Next I
''23 End If

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA erkennt errors.count nicht
04.08.2008 16:54:01
Nepumuk
Hallo Jörg,
es gibt ein Err-Objekt aber kein Error-Objekt in Excel und ich hab gerade nachgesehen, in Access gibt es das auch nicht. Das sieht so aus, als wäre das eine eigene Klasse. Schau mal in dein Access-Projekt rein, ob du da nicht ein entsprechendes Klassenmodul findest.
Gruß
Nepumuk

AW: VBA erkennt errors.count nicht
04.08.2008 17:18:34
Meier
hi,
also es gibt kein modul, kein klassenmodul und keine funktion mit dem namen "error" im Access-Projekt.
ideen?
danke, gruß jörg

AW: VBA erkennt errors.count nicht
04.08.2008 17:23:34
Meier
Hier noch, aus der Dokumentation der Access-Anwendung einige Zeilen, vielleicht helfen sie ja:
"Um die Fehlerinformation nicht zu verlieren, muss der ErrorHandler() eine spezielle Fehlerbehandlung aufweisen. Bevor die eigentliche Fehlerbehandlung aktiviert wird, müssen die Fehlerinformationen gesichert werden. Die Prozedur darf also auf keinen Fall mit einem On Error … Statement beginnen, da dieses Statement die Fehlerinformation vernichten und den Fehler zurücksetzen würde, womit eine Protokollierung der aufgetretenen Fehler nicht mehr möglich ist.
Die Fehlerinformation ist in verschiedenen Eigenschaften des Err-Objektes abgelegt. Um diese zwischenzuspeichern kann eine Typen-Deklaration verwendet werden. Die Error-Objekte der Errors-Collection weisen eine ähnliche Struktur auf. Zusätzlich verfügt es über die Properties HelpContext und HelpFile, kennt aber das LastDLLError-Property nicht.
Vielfach ist es ausreichend, eine reduzierte Version eines Datentypen für die Sicherung der Fehlerinformation zu definieren, welche die gemeinsamen Felder beinhaltet, da die weggelassenen Felder selten zur Fehlerbehebung beitragen.
Type ErrInfo
Nbr As Long 'Err.Number
Dsc As String 'Err.Description
Src As String 'Err.Source
End Type
Mit dieser Typendeklaration kann nun zu Beginn der Funktion die noch aktuelle Fehlerinformation gesichert werden. Dabei kann der Typ verwendet werden, um einen Array zu deklarieren, der dann anhand der Anzahl der Fehler in der Errors-Collection redimensioniert werden kann. So haben wir die Möglichkeit, das Err-Objekt in das 0-te Array Element und die Error Objekte in die folgenden Array-Variablen abzufüllen.

Public Function ErrorHandler()
Dim errSave() As ErrInfo
Dim I As Long
ReDim errSave(0)
With errSave(0)
.Nbr = Err.Number
.Dsc = Err.Description
.Src = Err.Source
End With
If Errors(Errors.Count - 1).Number = Err.Number Then
ReDim Preserve errSave(0 To Errors.Count - 1)
For I = Errors.Count - 1 To 0 Step -1
With errSave(I)
.Nbr = Errors(I).Number
.Dsc = Errors(I).Description
.Src = Errors(I).Source
End With
Next I
End If
End Function


Bei der Sicherung der Informationen sind einige Tücken zu umschiffen. Die Errors Collection wird nicht zurückgesetzt, wenn ein neuer Fehler auftritt, der diese nicht benutzt. Der letzte in der Errors Collection enthaltene Fehler (Errors.Count - 1) ist der zurückgemeldete Fehler, der im Err-Objekt enthalten ist. Falls die Err.Number nicht mit der Nummer des letzten Fehlers in der Errors-Collection identisch ist, muss davon ausgegangen werden, dass diese nicht benutzt wurde. Sie enthält daher noch alte Error-Objekte eines früheren Fehlers, die nicht gelöscht wurden. Sie darf in diesem Fall nicht ausgewertet werden. Falls die Fehlernummer identisch ist, enthält dagegen die Err.Description oftmals keinen aussagekräftigen Text, sondern irgendetwas wie "ODBC Aufruf fehlgeschlagen". Der aussagekräftigere Text für diese Fehlernummer befindet sich in diesem Fall im letzten Objekt der Errors-Collection. Daher führt nachfolgender Ansatz zu vernünftigen Fehlerinformationen:
Zuerst wird das Err-Objekt gesichert. Anschliessend wird kontrolliert, ob das letzte Error-Objekt der Errors-Collection mit dem Err-Objekt identisch ist (Vergleich über .Number). Falls das der Fall ist, wird die Information des Err-Objekts mit der Information der letzten Error-Objektes überschrieben. Alle weiteren, in der Errors-Collection enthaltenen Fehler-Objekte werden ebenfalls gesichert, da diese unter Umständen nützliche weitere Informationen zum Fehler enthalten."
Quelle: Dokumentation ErrorHandler von Henry Habermacher

Anzeige
AW: VBA erkennt errors.count nicht
06.08.2008 16:52:00
Nepumuk
Hallo Jörg,
irgendwo im Programm muss Errors deklariert sein. Denn das ist kein in VBA bekanntes Objekt.
In der Dokumentation von Henry Habermacher ist die Rede von "Errors Collection" und die muss irgendwo herkommen.
Wie schon geschrieben, für mich sieht das eigentlich wie eine Klasse aus. Die könnte sich aber auch z.B. in einer ActiveX.dll oder einem COM-Addin befinden. Hast du da irgendwas installieren müssen um das zu benutzen?

die er auch gleich mitliefert


Wo bekommt man die? Dann kann ich mir das genauer ansehen. Oder lade sie gezipt mal aus den Server.
Gruß
Nepumuk
P.S. Ein Programm um Codezeilen zu nummerieren habe ich selbst vor gut drei Jahren geschrieben.

Anzeige
AW: VBA erkennt errors.count nicht
06.08.2008 22:21:00
Meier
Hi Nepumuk,
Deinen Code (AddIn für Line Numbering) habe ich mittlerweile gefunden und ist auch schon im Einsatz.
Funktioniert super, einwandfrei, Kompliment!
Ich habe mal die Datei für den ErrorHandler in Access von Henry Habermacher hochgeladen (habe ich selbst aus dem Netz, von welcher offenen / freien Access Seite weiß ich nicht mehr):
https://www.herber.de/bbs/user/54391.zip
Ich finde den ErrorHandler absolut genial für Access.
Auch für viele Newbies wie mich super, denn man drückt sich ja sehr gerne um die wirklich wichtige Fehlerbehandlung. Damit funktioniert es einwandfrei.
Es mag noch mögliche Optimierungen geben (Email-Versand von ErrorMessages oder anderes) aber für die meisten Bereiche m.E. absolut ausreichend.
Ich habe es nun geschafft, dass der ErrorHandler unter Excel läuft, habe dazu aber den Bereich
'14 If Errors(Errors.Count - 1).Number = Err.Number Then
'15 ReDim Preserve errSave(0 To Errors.Count - 1)
'16 For I = Errors.Count - 1 To 0 Step -1
'17 With errSave(I)
'18 .Nbr = Errors(I).Number
'19 .Dsc = Errors(I).Description
'20 .Src = Errors(I).Source
'21 End With
'22 Next I
'23 End If
auskommentiert.
Es funktioniert aber irgendwas muss dieses Codeschnipsel ja bewirken.
Ich fände es super, wenn jemand von den Profis hier, den ErrorHandler auf Excel umschreiben würde (z.B. mit der Option, dass die ErrorMessage entweder in eine Excel-Datei oder eine CSV geschrieben wird. Das könnte man ja noch leicht einbauen).
Henry Habermacher hat den Code als Authorware gekennzeichnet und im Code ein wenig erläutert, was es heißt. Sollte jemand den Code anpassen und eine angepasste Datei online stellen, wäre es vielleicht nicht verkehrt, Henry Habermacher vorher zu informieren. Ich kann mir kaum vorstellen, dass er da ernsthaft was dagegen hat, sonst hätte er den Code für Access nicht frei ins Netz gestellt, oder?
Meine, es wäre nur fair.
Gruß
Jörg

Anzeige
AW: VBA erkennt errors.count nicht
07.08.2008 09:14:07
Nepumuk
Hallo Jörg,
Error und Errors sind Klassen der Bibliothek "dao360.dll" die kannst du also in Excel nicht benutzen.
Du kannst dir aber einfach eine eigene Klasse dafür entwickeln. Ich hab so etwas auch schon mal gemacht, um z.B. Fehlerschleifen abzufangen. Wenn z.B. der selbe Fehler in der selben Prozedur und der selben Zeile dreimal hintereinander in einem jeweilis maximalen Abstand von 10 Sekunden auftritt, dann wird das Programm gewaltsam abgebrochen. Mehr darf ich jetzt aber nicht dazu schreiben, weil das ein Bestandteil unserer Software ist von deren Verkauf wir leben.
Gruß
Nepumuk

Anzeige
AW: VBA erkennt errors.count nicht
07.08.2008 21:00:00
Meier
Hi Nepumuk,
soweit bin ich in VBA nicht.
Ich lass es dann einfach mal so stehen, schließe den Thread.
Bei mir funktioniert es auch mit dem Auskommentierten recht gut.
DANKE!
Gruß Jörg

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige