window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Fehlerbehandlung in der Praxis

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Wer die technischen Grundlagen zur Fehlerbehandlung im Artikel Fehlerbehandlung unter VBA gelesen hat, braucht nun ein paar Praxisbeispiele. Kein Problem: Der vorliegende Artikel ergänzt noch ein paar Kleinigkeiten und zeigt dann, wie Sie die Befehle zur Fehlerbehandlung sinnvoll in Ihre eigenen Anwendungen integrieren. Dabei erfahren Sie, dass eine Fehlerbehandlung nicht nur unvorhergesehene Fehler abfangen, sondern auch ganz gezielt eingesetzt werden kann.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Beispieldatenbank 11_08_FehlerbehandlungVBAII.mdb.

Fehler als Option

Einer der wichtigsten Anwendungsfälle neben dem gesteuerten Behandeln von Laufzeitfehlern ist das Provozieren von Fehlern. Gut, eigentlich soll kein Fehler provoziert werden, aber das Auftreten eines Fehlers bei einer bestimmten Aktion kann hier als Option behandelt werden.

Stellen Sie sich vor, Sie hätten eine kleine Prozedur, die einen Eintrag in eine Lookup-Tabelle vornehmen soll – zum Beispiel den Namen einer Kategorie in der Tabelle tblKategorien. Das Feld Kategoriename ist dabei durch den Wert Ja (Ohne Duplikate) für die Eigenschaft Indiziert als eindeutiges Feld markiert (siehe Bild 1). Das wiederholte Anlegen des gleichen Wertes schon in der Datenblattansicht der Tabelle führt dabei zu einer Fehlermeldung. Das Gleiche geschieht, wenn Sie einen Wert wie mit der folgenden VBA-Prozedur einfügen:

Das Hinzufügen doppelter Werte in dieses Feld löst einen Fehler aus.

Bild 1: Das Hinzufügen doppelter Werte in dieses Feld löst einen Fehler aus.

Public Sub KategorieHinzufuegen(strKategorie                                           As String)
     Dim db As DAO.Database
     Set db = CurrentDb
     db.Execute "INSERT INTO             tblKategorien(Kategoriename) VALUES('"                 & strKategorie & "')", dbFailOnError
     Set db = Nothing
End Sub

Es erscheint die Fehlermeldung aus Bild 2.

Fehlermeldung beim Anlegen doppelter Werte im eindeutigen Feld

Bild 2: Fehlermeldung beim Anlegen doppelter Werte im eindeutigen Feld

Wie können Sie diesen Fehler umgehen Dazu gibt es zwei Varianten. Die erste prüft zuvor, ob es bereits eine Kategorie mit dem angegebenen Namen gibt:

If IsNull(DLookup("KategorieID", "tblKategorien",        "Kategoriename = '" & strKategorie & "'")) Then
     db.Execute "INSERT INTO             tblKategorien(Kategoriename) VALUES('"                 & strKategorie & "')", dbFailOnError
Else
     MsgBox "Die Kategorie '" & strKategorie                         & "' ist bereits vorhanden."
End If

Die zweite Variante fragt gar nicht groß nach, sondern legt den Datensatz einfach an. Da vorher mit On Error Resume Next die eingebaute Fehlerbehandlung deaktiviert wird, löst die Execute-Methode keinen Fehler aus, wenn der anzulegende Datensatz bereits vorhanden ist. Dafür wird aber nachher geprüft, ob nicht vielleicht doch ein Fehler aufgetreten ist – beispielsweise der mit der Nummer 3022. In diesem Fall zeigt die in der If…Then-Bedingung enthaltene Anweisung eine entsprechende Meldung an:

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

Schreibe einen Kommentar