VBA On Error Resume Next oder Goto 0

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Zakarya El Oirzadi

Last updated on Dezember 23, 2022

In diesem Tutorial zeigen wir Ihnen, wie Sie die VBA-Funktionen On Error Resume Next und On Error Goto 0 verwenden können.

Lesen Sie unser Tutorial für weitere Informationen über die Fehlerbehandlung in VBA.

On Error Resume Next

On Error Resume Next weist VBA an, fehlerhafte Codezeilen zu überspringen und mit der nächsten Zeile fortzufahren. Das funktioniert folgendermaßen:

Sub OnErrorResumeNextDemo()

On Error Resume Next
MsgBox 5 / 0

MsgBox "Erledigt"
End Sub

Die Zeile MsgBox 5 / 0 würde einen Fehler auslösen (man kann nicht durch Null dividieren). Durch Hinzufügen von On Error Resume Next überspringt VBA diese Zeile und führt den Rest der Prozedur aus. Sie können dies selbst testen, indem Sie den Code kopieren und einfügen und dann On Error Resume Next auskommentieren.

On Error GoTo 0

On Error GoTo 0 ist die Standardeinstellung von VBA. Wenn ein Fehler mit On Error GoTo 0 auftritt, hält VBA die Ausführung des Codes an und zeigt sein Standard-Fehlermeldungsfenster wie im folgenden Beispiel an:

vba standardfehlermeldung unverträgliche datentypen

Es besteht keine Notwendigkeit, On Error GoTo 0 zu deklarieren, es sei denn, Sie haben eine andere Fehlerbehandlung in Ihrer Prozedur deklariert.

Wenn Sie in Ihrem Code eine Fehlerfalle wie On Error Resume Next hinzugefügt haben, können Sie On Error Goto 0 einfügen, um die Standardfehlerbehandlung von VBA wiederherzustellen.

Sub OnErrorResumeNextDemo()

OnError Resume Next
MsgBox 5 / 0
On Error GoTo 0

MsgBox "Erledigt"
End Sub

Dies ist sehr wichtig! On Error Resume Next sollte nur mit Vorsicht und nur dann verwendet werden, wenn es absolut notwendig ist.

Beispiel für On Error Resume Next

Gehen wir ein Beispiel durch, um zu zeigen, wie Sie On Error Resume Next in der Praxis verwenden können. Mit diesem Code wird jedes Arbeitsblatt in der Arbeitsmappe ausgeblendet:

Sub AlleBlaetterAusblenden()
 Dim ws As Worksheet
 For Each ws In ActiveWorkbook.Sheets
   ws.Visible = False
 Next ws
End Sub

Wenn wir diesen Code ausführen, erhalten wir einen Fehler, da wir nicht alle Arbeitsblätter in einer Arbeitsmappe ausblenden können. Mindestens eine Arbeitsmappe muss sichtbar bleiben.

vba standardfehlermeldung methode fehlgeschlagen

Wenn wir jedoch, wie unten gezeigt, On Error Resume Next zu der Prozedur hinzufügen, wird der Code über den Fehler hinaus fortgesetzt und das letzte Blatt in der Arbeitsmappe bleibt sichtbar.

Sub AlleBlaetterAusblenden()
 On Error Resume Next
 
 Dim ws As Worksheet
 For Each ws In ActiveWorkbook.Sheets
   ws.Visible = False
 Next ws
End Sub

beispiel on error goto next

Nehmen wir an, wir wollen unserer Prozedur weiteren Code hinzufügen. Als nächstes fügen wir On Error GoTo 0 hinzu, um die Standardfehlerbehandlung von VBA wiederherzustellen.

Sub ErrorGoTo0() 
On Error Resume Next 
 Dim ws As Worksheet 
 For Each ws In ActiveWorkbook.Sheets 
    ws.Visible = False 
 Next ws
On Error GoTo 0 
'Weiteren Code hier als Beispiel ausführen:
  ActiveSheet.Name = "Tabelle1"
End Sub

Wenn nun ein Fehler nach der Zeile mit On Error Goto 0 auftritt, wird die Excel-Standardfehlermeldung angezeigt. In diesem Beispiel haben wir bereits ein Blatt mit dem Namen Tabelle1 im ActiveWorkbook, da der Code oberhalb von On Error Goto 0 das Blatt ausblendet, es aber nicht löscht. Die Excel-Standardfehlermeldung, die besagt, dass der Blattname bereits in Verwendung ist, würde dann angezeigt werden.

 

On Error Goto Zeile

Wir können auch erzwingen, dass unser Code zu einer anderen Codezeile wechselt, indem wir den Befehl On Error Goto Zeile (Weitere Informationen) verwenden, der VBA anweist, zu einer bestimmten Codezeile zu wechseln, wenn ein Fehler auftritt.

Sub ErrorGoToZeile() 
 On Error Resume Next 
 Dim ws As Worksheet 
 For Each ws In ActiveWorkbook.Sheets 
  ws.Visible = False 
 Next ws 
 On Error GoTo errhandler 
 ActiveSheet.Name = "Tabelle1"
 Exit Sub
 errhandler:
 MsgBox("Es existiert bereits ein Blatt namens Tabelle1!", vbCritical)
End Sub

Im obigen Beispiel springt der Code, wenn er das Blatt „Tabelle1“ findet, in die Codezeile unter dem Fehlerbehandlungsetikett. In diesem Fall ruft er eine benutzerdefinierte Meldungsbox auf, die die Benutzer darüber informiert, dass das Blatt bereits existiert. Die Beschriftung des Fehlerbehandlungsprogramms muss einen Doppelpunkt enthalten, um VBA anzuweisen, dass es sich um eine Beschriftung handelt.

errhandler:

Der Code springt dann in die Zeile unter der Beschriftung und gibt die benutzerdefinierte Meldungsbox zurück.

vba fehlerbehandlung beispiel

Dies ist nützlich, wenn Sie nicht möchten, dass Ihr Benutzer auf Debug klicken kann, um in Ihren Code zu gelangen, da die Standard-Excel-Meldung immer eine Option zum Debuggen des Codes bietet.

vba fehlermeldung debugger

Wir brauchen auch ein Exit Sub in der Prozedur. Wenn es KEIN Blatt mit dem Namen Tabelle1 gibt, würde diese Codezeile ausgeführt und das aktuelle Blatt in Tabelle1 umbenannt werden. Wir möchten, dass der Code endet. Wir möchten nicht, dass er mit der Fehlerbehandlung fortfährt und die Meldungsbox anzeigt. Mit der Zeile Exit Sub wird die Prozedur beendet und der Code angehalten.

vba fehlerbehandlung sub beenden

vba-free-addin

Add-In für VBA-Code-Beispiele

Auf alle Code-Beispiele aus unserer Website einfach zugreifen.

Navigieren Sie einfach zum Menü, klicken Sie darauf und der Code wird direkt in Ihr Modul eingefügt. .xlam add-in.

(Keine Installation erforderlich!)

Kostenloser Download

Return to VBA Code Examples