BEISPIEL
Anweisungen zum Error-Handling
Reagiert Ihr Programm nicht auf einen Fehler, wird der bedauernswerte Anwender zum Beispiel mit
folgender Meldung schockiert:
Abbildung 16.15 Laufzeit-Fehlermeldung
Wollen Sie einen solchen Anblick vielleicht zum Markenzeichen Ihrer zukünftigen Programme werden
lassen? Das haben Sie nicht nötig, denn Access bietet genügend Möglichkeiten zur Fehlerbehandlung:
Anweisung/Funktion Beschreibung
Resume Wiederholt die fehlerhafte Codezeile, beispielsweise wenn ein Laufwerk nicht bereit ist oder eine Datei
geöffnet werden soll, diese jedoch momentan gesperrt ist.
Resume Next Erzwingt das Fortsetzen der Programmausführung mit der nächsten Anweisung.
On Error GoTo <label> Tritt ein Fehler auf, wird zum angegebenen Label gesprungen.
On Error Resume Next Schaltet die Fehlerbehandlung aus. Tritt ein Fehler auf, wird die Programmausführung mit dem nächsten
Befehl fortgesetzt.
On Error GoTo 0 Schaltet die Fehlerbehandlung wieder ein.
Err.Description Eigenschaft des Error-Objekts, die einen Fehlertext liefert.
Err.Number Eigenschaft des Error-Objekts, die eine Fehlernummer liefert
Tabelle 16.1 Reagieren auf Laufzeitfehler
Beispiele zum Error-Handling
Die Funktionen/Anweisungen zum Abfangen von Laufzeitfehlern sollen nun anhand einiger konkreter An-
wendungen demonstriert werden.
(Resume Next)
Mit folgendem »Programm« hätten Sie nie einen Fehler festgestellt, da die Programmaus-
führung einfach fortgesetzt wird, obwohl die Multiplikation zu einem Fehler führt (Überschreitung des
Integer
-Wertebereichs):
Sub Form_Load ()
On Error Resume Next
Dim a As Integer, b As Integer
1031
Fehlerbehandlung
BEISPIEL
HINWEIS
BEISPIEL
Kapitel 16: Techniken der Programmentwicklung
a = 10000
b = 10000
a = a * b
End Sub
Sie können allerdings über das
Err
-Objekt einen möglichen Fehler abfragen:
Sub Form_Load ()
On Error Resume Next
Dim a%, b%
a = 10000
b = 10000
a = a * b
if err.Number <> 0 Then Beep
End Sub
Wollen Sie die Fehlerbehandlung wieder einschalten, müssen Sie die folgende Zeile in den Quelltext einfügen:
On Error GoTo 0
(On Error GoTo)
Diese bessere Variante gibt einen Fehlermeldungstext aus und setzt danach die Programm-
ausführung fort. Sollte die Variable
a
jedoch im weiteren Verlauf benötigt werden, ist ein Programmabbruch
unbedingt erforderlich.
Sub Form_Load ()
On Error GoTo fehler
Dim a As Integer, b As Integer
a = 10000
b = 10000
a = a * b ' Wertebereich überschritten !!!!!
Exit Sub
fehler:
MsgBox Err.Description, 16, "Problem"
Resume Next
End Sub
Beachten Sie, dass nach der letzten regulären Anweisung ein Exit Sub stehen muss. Vergessen Sie dieses, wird
die Fehlerbehandlung immer (also auch bei Fehlerfreiheit) ausgeführt. Die letzte Anweisung der Fehlerbehandlungsroutine
muss ein Resume Next sein.
Soll die Prozedur/Funktion im Fehlerfall abgebrochen werden, verwenden Sie die Anweisungen Exit Sub
oder Exit Function.
(ExitSub)
Abbruch im Fehlerfall
Sub Test
On Error GoTo ende
...
1032
BEISPIEL
BEISPIEL
Exit Sub
ende:
Exit Sub ' Bei Funktion : Exit Function
Resume Next
End Sub
Neben diesen doch recht einfachen Beispielen lassen sich mit Resume bzw. Resume Next auch anspruchs-
vollere Fehlerbehandlungen realisieren.
Komplette Fehlerbehandlung
Sub Test
On Error GoTo laufwerksfehler
'.....
Exit Sub
laufwerksfehler:
Select Case MsgBox("Laufwerk nicht bereit", 37, "Problem")
Case 2 ' abort
Resume Next
Case 4 ' wiederholen
Resume
End Select
End Sub
Mit einem Dialogfeld wird auf den Fehler reagiert, dass zum Beispiel das Laufwerk nicht verfügbar ist. Wählt
der Bediener die Schaltfläche
Wiederholen
, wird die Anweisung
Resume
ausgeführt, andernfalls setzt die Pro-
grammausführung mit der nächsten Anweisung fort (
Resume Next
).
Neben diesen »unerwünschten« Fehlern kann man die o.g. Anweisungen auch bewusst provozieren, um
zum Beispiel den Wertebereich einer Variablen zu prüfen.
Eingabekontrolle
Function IsSingle (s$)
On Error GoTo fehler
Dim n As Single
IsSingle = False
n = CSng(s)
IsSingle = True
Exit Sub
fehler:
Exit Function
Resume Next
End Sub
Tritt bei der Typumwandlung (
n=CSng(s)
) ein Fehler auf, ist der Rückgabewert der Funktion
False
, andern-
falls
True
.
1033
Fehlerbehandlung

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.