On Error-Anweisung in Microsoft Excel VBA

Bilal Shahid 15 Februar 2024
  1. Was ist die On Error-Anweisung in VBA
  2. Bei Fehler Gehe zu 0
  3. Bei Fehler Goto <label>
  4. Bei Fehler als nächstes fortsetzen
  5. Abschluss
On Error-Anweisung in Microsoft Excel VBA

Excel VBA bietet Entwicklern eine Vielzahl unterschiedlicher Funktionen und Features. In diesem Artikel erfahren Sie mehr über die Anweisung On Error in VBA.

Was ist die On Error-Anweisung in VBA

Die On Error-Anweisung in VBA wird verwendet, um den Compiler anzuweisen, was im Fehlerfall als nächstes zu tun ist. Es ist eine Möglichkeit, eine Fehlerbehandlung für den VBA-Code durchzuführen.

Fehlerbehandlung ist der Prozess, Fehler vorherzusehen und zu beheben, bevor sie auftreten. Dies geschieht normalerweise bei Laufzeitfehlern, die während der Ausführung des Codes auftreten, z. B. beim Verweis auf eine nicht vorhandene Arbeitsmappe in Excel.

Solche Fehler lösen Ausnahmen aus, die die Ausführung des Codes anhalten. Um dies zu vermeiden, müssen wir daher den Codeabschnitt antizipieren, der Fehler erzeugen kann, und eine ordnungsgemäße Fehlerbehandlung durchführen.

Eine einfache Möglichkeit, Ausnahmen in Excel VBA zu behandeln, ist die Verwendung der Anweisung On Error. Es gibt drei Arten von On Error-Anweisungen in VBA mit der folgenden Syntax:

  1. Bei Fehler GoTo 0
  2. Bei Fehler Goto <label>
  3. Bei Fehler weitermachen

Lassen Sie uns sie einzeln erklären.

Bei Fehler Gehe zu 0

Die Anweisung On Error Goto 0 ist so, als ob keine Fehlerbehandlung vorhanden wäre, da sie die Standardaktion von VBA verwendet, um eine Standardfehlermeldung anzuzeigen, wenn eine Ausnahme auftritt. Die Fehlermeldung zeigt Typ und Name des Laufzeitfehlers und die zugehörige Nummer an.

Es bietet dem Benutzer auch einige Optionen, was als nächstes mit dem Code zu tun ist. Diese Optionen sind:

  1. Fortfahren: Durch Drücken dieser Option wird der Code fortgesetzt, wobei der Fehler ignoriert wird. Dies ist jedoch nicht jedes Mal möglich, und die Option ist ausgegraut und nicht interaktiv, wenn die Ausführung nicht fortgesetzt werden kann.
  2. Ende: Diese Option beendet das Programm und beendet die Ausführung.
  3. Debug: Diese Option hilft Ihnen, den Code zu debuggen, um die Fehlerquelle zu finden und zu beheben. Durch Drücken dieser Taste wechselt das Programm in den Debug-Modus, beginnend mit der Zeile, in der die Ausnahme aufgetreten ist.
  4. Hilfe: Diese Option führt den Benutzer zu den offiziellen Hilfeseiten von Microsoft mit Informationen zur Ausnahme.

Lassen Sie uns den folgenden Code ausführen, der einen Fehler erzeugt, wenn Book1.xlsx nicht in der Liste der aktiven Arbeitsmappen vorhanden ist.

Sub ExampleGoto0()

On Error GoTo 0
Workbooks("Book1.xlsx").SaveAs

End Sub

Im Fehlerfall wird das folgende Meldungsfeld angezeigt:

Fehlermeldung

Bei Fehler Goto <label>

Die Anweisung On Error Goto <label> kombiniert die Fehlerbehandlung mit der Anweisung Goto, indem sie den Compiler anweist, zu einer bestimmten Zeile im Code zu gehen, wenn eine Ausnahme auftritt.

Die Zeile wird entweder durch eine Zeilennummer oder ein Label angegeben. Wenn ein Fehler auftritt, wird die Programmsteuerung zu der Zeile übernommen, auf die das Label folgt, wobei jeder dazwischen geschriebene Code übersprungen wird.

Eine Bezeichnung wird in VBA mit der folgenden Syntax deklariert:

labelname:

Hinweis: Die angegebene Zeile oder Bezeichnung in der Goto-Anweisung muss sich in der gleichen Prozedur befinden wie die On Error Goto-Anweisung, oder es wird ein Kompilierungsfehler generiert.

Schauen wir uns an, wie wir ein Label verwenden können, um bei einem Fehler zu einer bestimmten Zeile zu wechseln.

Sub ExampleGotoLabel()

On Error GoTo errorhandler
Workbooks("Book1.xlsm").SaveAs
MsgBox "This line will not be executed"

Exit Sub

errorhandler:
Range("A1") = "Error handled"

End Sub

Hinweis: Wir müssen den Befehl Exit Sub direkt vor dem Label verwenden, um zu verhindern, dass die Zeilen nach dem Label jedes Mal ausgeführt werden, auch wenn kein Fehler vorliegt.

Bei Fehler als nächstes fortsetzen

Die Anweisung On Error Resume Next überspringt die Zeile, in der der Fehler aufgetreten ist, und setzt die Ausführung ab der nächsten Zeile fort. Es ist wichtig zu beachten, dass diese Anweisung keine Fehler behandelt oder sie behebt; vielmehr ignoriert es die fehlerhafte Anweisung, als wäre sie nicht im Code vorhanden.

Daher kann die Anweisung On Error Resume Next sehr schwierig sein, wenn sie nicht korrekt implementiert wird. Dies liegt daran, dass wir möglicherweise einige Zeilen überspringen, die für den auszuführenden Code wichtig sind, z. B. Variableninitialisierungen.

Um solche Situationen zu handhaben, verwenden wir die Eigenschaft Err.Number des Objekts Err, die alle Ausnahmen verfolgt.

Wenn eine Ausnahme auftritt, wird der Err.Number ein Wert zugewiesen; andernfalls wird es auf 0 gesetzt. Diese Informationen können alle Ausnahmen nachverfolgen und eine entsprechende Fehlerbehandlung durchführen.

Hinweis: Es wird empfohlen, beim Arbeiten mit Objekten die Anweisung On Error Resume Next anstelle von On Error Goto zu verwenden.

Sehen wir uns den folgenden Code an, der eine Ausnahme auslöst, wenn wir versuchen, eine nicht vorhandene Arbeitsmappe zu speichern. Aufgrund der On Error Resume Next-Anweisung wird die fehlerhafte Anweisung ignoriert.

Sub ExampleResumeNext1()

On Error Resume Next
Workbooks("Book1.xlsx").Save
Range("A1") = "Error skipped"

End Sub

Sehen wir uns nun ein weiteres Beispiel an, das die Verwendung der Eigenschaft Err.Number demonstriert, um Situationen zu handhaben, in denen das Überspringen einer Codezeile schädlich sein kann.

Sub ExampleResumeNext2()

On Error Resume Next
N = 1 / 0  ' This line will cause an exception because of division by zero

If Err.Number <> 0 Then
N = 1  ' Some default value of N, so that it is not used uninitialized in the following lines
End If

For i = 1 To N
Range("A1") = i
Next i

End Sub

Abschluss

Dies fasst unsere Diskussion über die On Error-Anweisung in VBA zusammen, die eine nützliche Programmiersprache ist, die Microsoft Office-Benutzern wertvolle Zeit spart. Wir hoffen, Sie haben die verschiedenen Möglichkeiten kennengelernt, wie die Anweisung On Error zur Fehlerbehandlung verwendet wird.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

Verwandter Artikel - VBA Error