Home > Artikel > Ausgabe 3/2014 > Fehlerbehandlung in Makros

Fehlerbehandlung in Makros

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Wenn Sie mit Makros programmieren, was zumindest beim Einsatz von Webdatenbanken (ab Access 2010) oder beim Einsatz von Datenmakros nötig ist, möchten Sie vielleicht auch eine Fehlerbehandlung zu Ihren Makros hinzufügen. Dieser Artikel zeigt, wie Fehlerbehandlung in Makros funktioniert und welche Makroaktionen dafür benötigt werden.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1403_Makros.mdb.

Makroaktionen zur Fehlerbehandlung

Für die Fehlerbehandlung stellt Access ab Version 2010 die beiden folgenden Makroaktionen zur Verfügung:

  • BeiFehler: Wird vor dem Aufruf der mit einer Fehlerbehandlung zu versehenen Makroaktionen aufgerufen und nimmt die beiden Parameter Gehe zu und Makroname entgegen.
  • LöschenMakroFehler: Löscht die Informationen des zuletzt aufgetretenen Fehlers

Makroaktion BeiFehler

Die Makroaktion BeiFehler erlaubt verschiedene Aktionen, wenn ein Fehler in einer der folgenden Makroaktionen ausgelöst wird. Diese können Sie mit dem Parameter Gehe zu einstellen (siehe Bild 1):

Mögliche Schritte nach dem Auftreten eines Fehlers

Bild 1: Mögliche Schritte nach dem Auftreten eines Fehlers

  • Nächster: Sorgt dafür, dass die fehlerhafte Anweisung ignoriert und die folgende Anweisung ausgeführt wird. In Bild 2 löst die Division durch 0 einen Fehler aus und zeigt gleich die folgende Meldung an. Dies entspricht der Anweisung On Error Resume Next unter VBA.
  • Gehe zu: Nächster fährt nach dem Fehler mit der folgenden Makroaktion fort.

    Bild 2: Gehe zu: Nächster fährt nach dem Fehler mit der folgenden Makroaktion fort.

  • Macroname: Sie können eine Fehlerbehandlung in einem Makro oder einem Untermakro programmieren. Wenn Sie diese Option auswählen, geben Sie für den zweiten Parameter Makroname den Namen des aufzurufenden Makros oder Untermakros an.
  • Fehlgeschlagen: Löst den Fehler aus und zeigt die Standardmeldung von Access an, so als ob die Fehlerbehandlung gar nicht aktiviert wäre. In der Tat dient diese Variante dazu, eine zuvor aktivierte benutzerdefinierte Fehlerbehandlung wieder zu deaktivieren (entspricht der Anweisung On Error Goto 0 unter VBA)

In letzterem Fall würde Access die gleiche Fehlermeldung anzeigen, als wenn das Makro keine Fehlerbehandlung enthielte. Diese sieht wie die Fehlermeldung aus, welche eine entsprechende VBA-Anweisung auslösen würde – nur ohne Angabe der Fehlernummer und ohne die Möglichkeit, den Fehler zu debuggen (siehe Bild 3).

Gehe zu: Fehlgeschlagen zeigt die eingebaute Fehlermeldung von Access an.

Bild 3: Gehe zu: Fehlgeschlagen zeigt die eingebaute Fehlermeldung von Access an.

Anschließend erscheint dann noch ein Dialog mit weiteren Informationen (siehe Bild 4). Dieser enthält den Makronamen, die Bedingung, den Aktionsnamne, der den Fehler ausgelöst hat, die Argumente und die Fehlernummer. Außerdem finden Sie dort die Möglichkeit, verschiedene Aktionen auszuführen.

Fehlermeldung eines Makros

Bild 4: Fehlermeldung eines Makros

Das MacroError-Objekt

Zusätzlich gibt es ein Objekt namens MacroError, das ähnliche Informationen liefert wie das von VBA bekannte Err-Objekt:

  • Number: Fehlernummer (entspricht Err.Number)
  • Description: Fehlermeldung (entspricht Err.Description)
  • MacroName: Name des Makros, das den Fehler auslöste
  • ActionName: Name der Makroaktion, die den Fehler auslöste
  • Arguments: Parameter der Makroaktion
  • Condition: Bedingung beim Aufruf der Makroaktion

Wie Sie dieses Objekt nutzen können, versuchen wir anhand einer Fehlerbehandlung herauszufinden. Dazu legen wir ein neues Makro namens macFehlerbehandlung an und fügen ein Untermakro namens Fehlerbehandlung hinzu. Dieses soll eine Meldungsfeld-Makroaktion enthalten, welche die Fehlerinformationen in einem Meldungsfenster ausgibt.

Um den auszugebenden Ausdruck zusammenzustellen, machen wir ausgiebigen Gebrauch der mit Access 2010 eingeführten IntelliSense-Funktionen für Ausdrücke. Dies sieht dann etwa wie in Bild 5 aus, wo wir die einzelnen Elemente des MacroError-Objekts zu einer Meldung zusammenstellen. Insgesamt sieht diese dann wie folgt aus:

Makro zur Fehlerbehandlung

Bild 5: Makro zur Fehlerbehandlung

="Fehler '" & [MacroError].[Beschreibung] & "' in der Aktion '" & [MacroError].[Actionname] & "' des Makros '" & [MacroError].[MacroName] & "'. Bedingung: " & [MacroError].[Condition] & ", Fehlernummer " & [MacroError].[Number]

Makro-Fehlerbehandlung aufrufen

Nun haben wir uns gedacht, dass es ja sinnvoll wäre, die Fehlerbehandlung in einem eigenen Makro unterzubringen – nämlich im Untermakro Fehlerbehandlung im Makro macFehlerbehandlung –, damit wir diese von verschiedenen Makros aus aufrufen können. Also probieren wir das in einem weiteren Makro namens macBeiFehler_ExterneFehlerbehandlung aus, indem wir dort die Makroaktion Bei Fehler anlegen und für Gehe zu den Wert Makroname und für Makroname den Wert macFehlerbehandlung.Fehlerbehandlung eintragen.

Dummerweise gelingt dies nicht, wie Bild 6 zeigt. Laut der dortigen Fehlermeldung sucht Access im gleichen Makro nach der Fehlerbehandlung, was wohl darauf hindeutet, dass wir die Fehlerbehandlung nicht in einem eigenen Makro unterbringen können.

Aufruf der Fehlerbehandlung in einem anderen Makro

Bild 6: Aufruf der Fehlerbehandlung in einem anderen Makro

Also fügen wie die Fehlerbehandlung in das gleiche Makro ein, das auch den Fehler auslöst. Das Ergebnis sieht nun wie in Bild 7 aus.

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!