Errorhandling - Resume
Programmablauf wiederaufnehmen
Sobald der interne Error-Handler aktiviert wurde, muss das Programm zum „normalen Ablauf“ zurückkehren. Hierfür stellt VB/A die Anweisung Resume (Wiederaufnehmen) zur Verfügung. Man unterscheidet drei Varianten:
Resume
Die Anweisung Resume entspricht einer „Retry“-Anweisung, also die Wiederholung der Codezeile, die den Fehler verursacht hat. Das macht nur dann Sinn, wenn in der Fehlerbehandlung die Voraussetzungen erfüllt wurden, um das Programm ab der entsprechenden Codezeile – jetzt ohne Fehler – fortführen zu können; z.B.:
Sub DivideByZero() Dim i As Integer Dim intDenom As Integer On Error GoTo ErrHandler intDenom = 0 i = 8 / intDenom Exit Sub ErrHandler: intDenom = InputBox("Bitte gültigen Divisor eingeben (>0)") Resume 'Retry End Sub
Resume Next
Die Resume Next-Anweisung ist ähnlich der Resume-Anweisung, wobei hier nun in der Codezeile das Programm fortgeführt wird, die der Fehler verursachenden Codezeile folgt; z.B.:
Sub DivideByZero() Dim i As Integer Dim intDenom As Integer On Error GoTo ErrHandler intDenom = 0 i = 8 / intDenom Exit Sub ErrHandler: MsgBox "Division wurde abgebrochen!" Resume Next End Sub ' oder Sub DivideByZero() Dim i As Integer Dim intDenom As Integer On Error Resume Next intDenom = 0 i = 8 / intDenom If Err.Number <> 0 Then MsgBox "Division wurde abgebrochen!" End If End Sub
Resume Line
Die dritte Version der Resume Anweisung verweist mit Line auf ein gültiges Programm-Label oder eine gültige Zeilennummer; z.B.:
Sub DivideByZero() Dim i As Integer Dim intDenom As Integer On Error GoTo ErrHandler intDenom = 0 i = 8 / intDenom Exit Sub AltCalc: i = ERR_VALUE Exit Sub ErrHandler: MsgBox "Division wurde abgebrochen!" Resume AltCalc End Sub
Bei der Nutzung der Resume Line Anweisung sollte man sehr vorsichtig sein. Wenn die Resume-Anweisung aufgerufen wird, ohne das ein Error-Handler aktiv ist, führt dies wiederum zu dem Fehler 20 („Resume ohne Fehler!“).