Letzte Änderung am 24. Februar 2022 by Christoph Jüngling
Nach einer superkurzen Einführung in das Errorhandling zu den Möglichkeiten, wie in VBA Fehler abgefangen werden können, kommt von Thomas Möller sofort die erste überaus hilfreiche Empfehlung. Die Einstellung “Unterbrechen bei Fehlern” gilt VBA-weit! Das bedeutet, wenn der User es umgestellt hat, kracht unser Code. Abhilfe schafft ein einfacher Befehl, den unsere Applikation beim Starten ausführen sollte:
Application.SetOption("Error Trapping") = 2
Da hat sich der Vortrag doch schon gelohnt!
UPDATE 09/2017: Zumindest in Access 2016 muss es so geschrieben werden:
Application.SetOption "Error Trapping", 2
Know your editor!
Anschließend zeigt Thomas gemäß der Empfehlung “Kenne deinen Editor” aus dem Buch “Der pragmatische Programmierer”, welche Tastenschlüssel möglich sind, wie man Haltepunkte setzt, und generell beim Debuggen sinnvollerweise vorgeht. Z.B. das extra “Resume” hinter einem “Resume Next”, das zunächst niemals ausgeführt wird. Sobald man aber die Zeile braucht und z.B. mit Strg+F9 die nächste Anweisung festlegt, wird man dankbar sein, denn das nächste F8 (Einzelschritt) führt zu genau der Zeile, die den Fehler verursacht hat. Auch das Semikolon am Ende einer Print-Anweisung kennt laut Thomas kaum noch jemand, obwohl es seit Urzeiten in VB möglich ist. Das Überwachungsfenster gehört vielleicht ebenso zu den selten genutzten Features des im Grunde sehr guten VBA-Debuggers, einschließlich bedingter Breakpoints, wie das “Lokal”-Fenster mit allen Variablen, die in der aktuellen Situation verfügbar sind. Die Liste lässt sich noch weiter führen. Wer kennt den “Call Stack”, alle Eigenschaften des Err-Objektes, oder die Erl (error line)?
Zeilennummern? Das ist doch Old-School!
Die generische Funktion Erl gibt bei einem Laufzeitfehler die Zeilennummer an, in der der Fehler aufgetreten ist. Vorausgesetzt ist natürlich, dass wir überhaupt Zeilennummern verwenden. Diese scheinbar antiquierte Methode, die historisch gesehen in Basic mal eine Notwendigkeit war, verwendet heute wohl niemand mehr, da sie während der Entwicklung nur Nachteile bringt. Auch würde die Quellcodeverwaltung unnötig viele Änderungen loggen, die inhaltlich gar nichts mit unserem Programm zu tun haben.
Doch Zeilennummern können die Fehlermeldungen erheblich verbessern und damit die Fehlerbehebung vereinfachen! Dabei wäre es aber wichtig, dass diese automatisch hinzugefügt werden können, kurz bevor wir das Programm an den Anwender ausliefern. Dazu bieten die MZ-Tools eine gute Funktion und sind neuerdings auch per Skript steuerbar. Die MZ-Tools sind inzwischen kostenpflichtig (früher gab es für VBA und VB6 eine kostenlose Version). Thomas selbst hat das Add-in TM-VBAZeilenNummerieren (UPDATE 2017: Link geändert) geschrieben, es steht zum Download auf seiner Homepage bereit.
Error-Handler
Thomas geht dann noch auf einige zusätzliche Tools ein und grenzt die Möglichkeiten eines spezifischen Error-Handlings in jeder Funktion gegen ein globales Error-Handling ab, wie es z.B. der vbWatchDog anbietet.
Fazit
Alles in allem mal wieder ein informativer Vortrag von Thomas Möller, von dem ich persönlich vieles schon kannte. Trotzdem gibt es immer noch Kleinigkeiten, die mir neu sind, und deshalb gehe ich immer wieder gerne zur AEK.
UPDATE 2020: Link zu vbWatchDog ergänzt.
UPDATE 2022: Link zu vbWatchDog auf eigenes Schlagwort geändert.
Neueste Kommentare