|
Laufzeitfehler abfangen und in einer Fehlerbehandlungsroutine
behandeln und gegebenenfalls bereinigen, ist ein oberstes Gebot.
Eine solche Fehlerbehandlungsroutine ist selbst jedoch auch nicht
gegen Fehler gefeit. Das Problem ist nur: Visual Basic erlaubt Ihnen
offensichtlich nicht, dazu erneut eine weitere Fehlerbehandlung
einzuschalten, gewissermaßen verschachtelte Fehlerbehandlungen
anzulegen. Auch das ausdrückliche Abschalten der vorhergehenden
Fehlerbehandlung mit On Error GoTo 0 nützt nichts.
Ein wenig Scham wegen der ganzen etwas vorsintflutlichen
GoTo-Technik der Fehlerbehandlung mag vielleicht der Grund sein,
weswegen Microsoft nicht noch eine weitere Anweisung dieses
Strickmusters offengelegt und dokumentiert hat. Aber es gibt sie,
sowohl in VB 6 als auch schon in VB 5:
On Error GoTo -1
Mit dieser Anweisung können Sie beispielsweise nach einem Sprung
in eine Fehlerbehandlungsroutine die übergeordnete Fehlerbehandlung
vollends abschalten und danach eine neue Fehlerbehandlung
aktivieren.
Dieses "vollends abschalten" wirkt allerdings im
wortwörtlichen Sinne: Anweisungen wie Resume und Resume Next
verlieren ihren Bezug und sind daher nicht mehr möglich. Der
Rücksprung kann dann nur noch über ein GoTo zu einer Sprungmarke
an der Stelle, an der der übergeordnete Fehler auftrat, erfolgen.
Lediglich auf der jeweils untersten Ebene funktionieren ein Resume
oder ein Resume Next wie gewohnt.
Private Sub Test()
Dim nResult As Double
On Error GoTo Test_Error1
nResult = 1 / 0
Test_Error1_Return:
Exit Sub
Test_Error1:
On Error GoTo -1
On Error GoTo Test_Error2
nResult = 1 / 0
Test_Error2_Return:
GoTo Test_Error1_Return
Test_Error2:
MsgBox "Fehler in Fehlerbehandlung konnte abgefangen werden."
On Error GoTo -1
On Error GoTo Test_Error3
nResult = 1 / 0
Test_Error3_Return:
GoTo Test_Error2_Return
Test_Error3:
MsgBox "Fehler in Fehlerbehandlung der Fehlerbehandlung " _
& "konnte abgefangen werden."
Resume Next
End Sub
|