VBA bei Fehler

Excel VBA On Fehlererklärung

Die VBA On Error- Anweisung ist eine Art Fehlerbehandlungsmechanismus, mit dem der Code angewiesen wird, was zu tun ist, wenn ein Fehler auftritt. Wenn ein Code auf einen Fehler stößt, wird die Ausführung im Allgemeinen gestoppt, aber mit dieser Anweisung im Code wird die Ausführung des Fehlers ausgeführt Der Code wird fortgesetzt, da er Anweisungen enthält, die ausgeführt werden müssen, wenn ein Fehler auftritt.

Wenn Sie den Fehler im Code antizipieren, sind Sie ein Profi in der VBA-Codierung. Sie können den Code nicht 100% effizient machen, selbst wenn Sie sicher sind, dass Ihr Code auf die eine oder andere Weise fehlerhaft ist.

Es ist fast unmöglich, jede Art von Fehler zu identifizieren und zu behandeln, aber wir haben verschiedene Möglichkeiten, einen Fehler in VBA zu behandeln. Während Sie den Code schreiben, können Sie nicht vorhersehen, welche Art von Fehlercode auftreten kann. Wenn jedoch ein Fehler auftritt, verbringen Sie mehr Zeit mit dem Debuggen als mit dem Schreiben des Codes selbst.

Was ist ein Fehler?

Ein Fehler ist nichts anderes als eine Codezeile, die aufgrund der Funktionalität oder des falschen Codes nicht ausgeführt werden kann. Versuchen Sie also, den Fehler zu antizipieren und zu behandeln.

Wenn Sie beispielsweise versuchen, das nicht vorhandene Blatt zu löschen, können wir diese Codezeile offensichtlich nicht ausführen.

Es gibt drei Arten von Fehlern: Ein Fehler wird aufgrund nicht deklarierter Variablen kompiliert. Der zweite ist ein Dateneingabefehler aufgrund falscher Eingaben des Codierers, und der dritte ist ein Laufzeitfehler aufgrund von VBA, der die Codezeile nicht erkennen kann. Für den Versuch, auf Arbeitsblätter oder Arbeitsmappen zuzugreifen oder diese zu bearbeiten, die nicht vorhanden sind.

Wir haben jedoch eine Anweisung in VBA, um alle diese Arten von Fehlern zu behandeln, z. B. die Anweisung "On Error".

Arten von On-Fehleranweisungen

Der wichtigste Punkt bei der Behandlung von Fehlern in VBA ist die Anweisung "On Error". Beispiel: Bei Fehler "Nächste Zeile fortsetzen", "Zu einer anderen Zeile wechseln oder zu einer anderen Zeile springen" usw.

Die On-Error-Anweisung enthält drei Arten von Anweisungen.

  1. GoTo 0  bedeutet, dass immer dann, wenn der Laufzeitfehler auftritt, Excel oder VBA das Fehlermeldungsfeld anzeigen sollte, in dem die Art des aufgetretenen Fehlers angegeben ist. Sobald VBA den Code ausführt, werden alle Fehlerbehandlungsroutinen in diesem bestimmten Block des Codes deaktiviert.
  2. Als nächstes fortsetzen bedeutet, dass diese Anweisung den Excel anweist, diesen Fehler zu ignorieren und mit der nächsten Codezeile fortzufahren, ohne Fehlermeldungen anzuzeigen. Dies bedeutet nicht, dass der Fehler behoben wird, sondern dass der Fehler einfach ignoriert wird.
  3. GoTo [Label] bedeutet, dass bei jedem Auftreten eines Fehlers in VBA das zugewiesene Label aufgerufen wird. Dadurch springt der Code zu der vom Codierer bereitgestellten Zeile.

Top 3 Möglichkeiten zur Behandlung von Fehlern in VBA

Sie können diese VBA On Error-Vorlage hier herunterladen - VBA On Error-Vorlage

# 1 - On Error Resume Next

Angenommen, Sie teilen den Wert 20 durch 0 und haben die Variable deklariert, um ihr das Ergebnis der Division zuzuweisen.

Code:

 Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub 

Wenn Sie diesen Code ausführen, wird der folgende Fehler ausgegeben.

Sie können also keine Zahl durch den Wert Null teilen. Die Laufzeitfehlernummer ist 11, dh Division durch Null.

Jetzt werde ich dem Code eine weitere Zeile hinzufügen.

Code:

 Sub OnError_Example1 () Dim i als Ganzzahl, j als Ganzzahl i = 20/0 j = 20/2 End Sub 

Jetzt werde ich die Anweisung On error resume als nächstes oben hinzufügen.

Code:

 Sub OnError_Example1 () Dim i als Ganzzahl, j als Ganzzahl bei Fehler Fortsetzen Weiter i = 20/0 j = 20/2 End Sub 

Wenn ich diesen Code jetzt ausführe, werden mir keine Fehlermeldungen angezeigt, sondern die nächste Codezeile, dh j = 20/2.

# 2 - Bei Fehler GoTo Label

Ich habe drei Variablen deklariert.

Code:

 Sub OnError_Example1 () Dim i als Ganzzahl, j als Ganzzahl, k als Ganzzahl 

Für all diese drei Variablen werde ich eine Divisionsberechnung zuweisen.

Code:

 Sub OnError_Example1 () Dim i als Ganzzahl, j als Ganzzahl, k als Ganzzahl i = 20/0 j = 20/2 k = 10/5

Das Ergebnis all dieser drei Berechnungen wird im Meldungsfeld angezeigt.

Code:

 Sub OnError_Example1 () Dim i als Ganzzahl, j als Ganzzahl, k als Ganzzahl i = 20/0 j = 20/2 k = 10/5 MsgBox "Der Wert von i ist" & i & vbNewLine & "Der Wert von j ist "& j & _ vbNewLine &" Der Wert von k ist "& k & vbNewLine End Sub 

Jetzt werde ich versuchen, diesen Code auszuführen, da die Berechnung von "I" nicht korrekt ist. Wir erhalten den Laufzeitfehler 11.

Jetzt werde ich die Anweisung "On Error Resume Next" hinzufügen.

Code:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error Resume Next i = 20/0 j = 20/2 k = 10/5 MsgBox "Der Wert von i ist" & i & vbNewLine & "The Wert von j ist "& j & _ vbNewLine &" Der Wert von k ist "& k & vbNewLine End Sub 

Wenn ich dies ausführe, wird die I-Berechnung übersprungen und die verbleibenden zwei Berechnungen ausgeführt. Das Ergebnis ist wie folgt.

Anstelle von "On Error Resume Next" füge ich jetzt "On Error GoTo KCalculation" hinzu.

Code:

 Sub OnError_Example1 () Dim i als Ganzzahl, j als Ganzzahl, k als Ganzzahl bei Fehler GoTo KCalculation: i = 20/0 j = 20/2 KCalculation: k = 10/5 MsgBox "Der Wert von i ist" & i & vbNewLine & "Der Wert von j ist" & j & _ vbNewLine & "Der Wert von k ist" & k & vbNewLine End Sub 

Hinweis: Hier ist „KCalculation“ der von mir angegebene Labelname. Sie können Ihren eigenen Labelnamen ohne Leerzeichen angeben.

Wenn ich diese Codezeile jetzt ausführe, springt sie nicht zur nächsten Zeile, sondern zum von mir eingegebenen Labelnamen, dh "KCalcualtion". Hier wird der durch "I" angegebene Fehler ignoriert und es wird auch keine "j" -Berechnung ausgeführt, sondern es wird sofort zu "KCalcualtion" gesprungen.

# 3 - Druckernummer in VBA drucken

Am Ende des Codes können wir die Fehlernummer auch in einem separaten Meldungsfeld ausdrucken. Die folgende Codezeile erledigt diesen Job.

Code:

Err.Number

Jetzt werde ich diesen Code ausführen. Das erste Meldungsfeld zeigt die Berechnungsergebnisse an.

Klicken Sie auf OK. Es wird ein weiteres Meldungsfeld angezeigt, in dem die Fehlernummer angezeigt wird.

Wir gehen 11 als Ergebnis, dh Division durch Null.

Wir können auch die Fehlerbeschreibung anstelle der Nummer erhalten. Wir müssen nur den Code ändern, unten ist der Code.

Code:

Err.Beschreibung

Es wird eine Beschreibung wie diese angezeigt.

Dinge, an die man sich erinnern sollte

  • Vergessen Sie nach der Eingabe von "On Error Resume Next" am Ende des Codes nicht, die Anweisung "On Error GoTo 0" hinzuzufügen.
  • Der Markenname sollte an beiden Stellen gleich sein.
  • Markennamen müssen nicht rechtzeitig definiert werden.
  • Sehen Sie am Ende immer über das separate Meldungsfeld nach, welcher Fehler aufgetreten ist.