Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Wer mit VBA arbeitet, wird früher oder später auf das Thema Fehlerbehandlung stoßen. Je komplexer Code wird und je mehr sein Ablauf von externen Faktoren beeinflusst wird, desto mehr sind sie auf eine Fehlerbehandlung angewiesen. Die Fehlerbehandlung sorgt dafür, dass der Benutzer nicht mit schwer interpretierbaren oder noch besser gar nicht mit Fehlermeldungen konfrontiert wird. Im Hintergrund hilft eine Fehlerbehandlung aber noch in vielen anderen Fällen, von denen der Benutzer gar nichts mitbekommt.
Wozu eine Fehlerbehandlung
Eine perfekte Anwendung arbeitet ohne Fehler. Perfekte Anwendungen sind jedoch selten, also treten auch Fehler auf. Zumindest der Benutzer einer Anwendung sollte jedoch den Eindruck erhalten, dass er mit einer perfekten Anwendung arbeitet – oder zumindest mit einer, die Fehler, wenn sie denn auftreten, entsprechend professionell verarbeitet.
Sprich: Besser, eine Anwendung wird im schlimmsten Fell beim Auftreten eine Fehlers kontrolliert beendet, als wenn sie unkontrolliert abstürzt – und am Ende sogar noch Daten verloren gehen.
Wenn unter VBA ein Fehler auftritt, geht das in der Regel beispielsweise mit dem Leeren von Objektvariablen einher. Wenn Sie also gerade eine globale Objektvariable mit einem Verweis auf ein Objekt wie ein Formular gefüllt haben und dann ein Fehler auftritt, wird die Objektvariable geleert. Mit der Folge, dass ein Zugriff auf das mit dieser Variable referenzierte Objekt ebenfalls zu einem Fehler führt.
Wenn Sie in einem solchen Fall eine Fehlerbehandlung verwenden, verhindern Sie zumindest den Folgefehler. Und Sie präsentieren dem Benutzer damit gegebenenfalls eine aussagekräftige Fehlermeldung statt einer von Access/VBA generierten Fehlermeldung, mit welcher der Benutzer oft nichts anfangen kann.
Dieser Artikel zeigt, wie Sie die unter VBA auftretenden Fehler so behandeln, dass Ihre Anwendung stabil weiterläuft und der Benutzer gegebenenfalls erfährt, was warum schief gelaufen ist.
Fehler ohne Fehlerbehandlung
Tritt ein Fehler ohne Fehlerbehandlung auf, löst dieser eine entsprechende Meldung aus und zeigt die fehlerhafte Stelle im Code an. Dies gilt jedoch nur, wenn Sie die Vollversion von Access verwenden und die Datei im .mdb-, dem .accdb– oder einem anderen nicht geschützten Format vorliegt. Wenn die Datenbank als .mde– oder .accde-Datenbank kompiliert wurde, also ihr Code nicht mehr im Entwurf eingesehen werden kann, erhalten Sie nur die Fehlermeldung mit Nummer und Text, können aber nicht mehr den fehlerhaften Code einsehen. Bei Verwendung der Runtime-Version von Access (mehr dazu in einem späteren Artikel) erhalten Sie nur noch eine allgemeine Fehlermeldung. Deshalb ist gerade in diesem Fall eine benutzerdefinierte Fehlerbehandlung sehr wichtig!
Die Meldung sieht beispielsweise wie in Bild 1 aus, weitere Beispiele und Grundlagen zu den verschiedenen Fehlerarten erhalten Sie im Artikel Fehler unter VBA.
Bild 1: Fehlermeldung eines unbehandelten Fehlers
Fehlerbehandlung von Laufzeitfehler
Im Gegensatz zu Syntax- oder Kompilierfehlern können Sie auf Fehler zur Laufzeit mit entsprechenden Anweisungen reagieren. Die einfachste Möglichkeit ist es, den Fehler einfach zu ignorieren. Dazu tragen Sie die Anweisung On Error Resume Next innerhalb der Routine, aber vor der fehlerhaften Zeile ein. Ein Beispiel sieht so aus:
Public Sub DivisionDurchNullFehlerbehandlung() On Error Resume Next Debug.Print 1 / 0 End Sub
Das Resultat dieser Vorgehensweise ist, dass der in der Zeile Debug.Print 1/0 auftretende Fehler einfach ignoriert wird. Dummerweise tut die Zeile aber auch nichts mehr.
Im folgenden Beispiel tritt in der Zeile i = 32768 ein überlauf auf (Fehler 6). Die fehlerhafte Zeile wird nicht ausgeführt, i wird also nicht mit dem angegebenen Wert gefüllt. Integer-Variablen haben den Standardwert 0, also gibt das Meldungsfenster den Wert 0 aus:
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo