Wie ignoriere ich Fehler mit VBA On Error Resume Next Statement?

Excel VBA bei Fehler Fortsetzen Weiter

VBA On Error Resume Next ist eine Fehlerbehandlungsanweisung. Wenn der Fehler beim Ausführen des Codes auftritt, anstatt einen Fehler anzuzeigen, um die nächste Codezeile durch Ignorieren der Fehlermeldung fortzusetzen, können Sie diese Anweisung verwenden.

Diejenigen, die regelmäßig Codes in Excel VBA schreiben, wissen, dass sie möglicherweise auch nach dem Schreiben kompetenter Codes Fehler erhalten. Sie möchten diesen Fehler jedoch ignorieren und mit den nächsten Codezeilen fortfahren. Ein typisches Beispiel für das Abrufen einer Fehlermeldung ist, wenn die VLOOKUP-Arbeitsblattfunktion den Suchwert aus dem Tabellenarray nicht findet. Es wird kein # N / A-Fehler zurückgegeben. Vielmehr wird der Fehler ausgelöst. Als "Die VLOOKUP-Eigenschaft der Arbeitsblatt-Funktionsklasse kann nicht abgerufen werden."

Wenn Sie nicht wissen, warum wir diesen Fehler erhalten, ist es sehr schwierig, den Fehler zu beheben. In VBA gibt es eine Funktion namens " On Error Resume Next ".

Was macht On Error Resume Next in VBA?

Es gibt bestimmte Bereiche als Codierer. Wir werden sicher wissen, dass dies eine Fehlermeldung ergibt, aber wir müssen diesen Fehler ignorieren, um den Code weiter durchzugehen. Wie man diesen Fehler ignoriert, ist der häufigste Zweifel, den jeder hat.

Mit der Anweisung VBA On Error Resume Next können wir den Fehler ignorieren und die nächste Codezeile fortsetzen.

Beispiel 1

Angenommen, Sie haben viele Arbeitsblätter und verstecken einige davon als Teil des VBA-Projekts. Im Folgenden finden Sie beispielsweise die Arbeitsblätter, die ich in meinem Arbeitsblatt habe.

Ich habe Codes geschrieben, um die Blätter "Sales & Profit" auszublenden, und unten ist der Code.

Code:

Sub On_Error () Arbeitsblätter ("Sales"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Jetzt starte ich den Code Zeile für Zeile mit der Taste F8 .

Wenn ich die Taste F8 noch einmal drücke , wird das Blatt mit dem Namen " Vertrieb " ausgeblendet .

Drücken Sie nun noch einmal die Taste F8 und sehen Sie, was passiert.

Wir haben den Fehler "Index außerhalb des Bereichs", weil in der aktuellen Codezeile Folgendes angegeben ist.

Arbeitsblätter ("Profit 2019"). Visible = xlVeryHidden

Es wird versucht, das Arbeitsblatt mit dem Namen " Profit 2019 " auszublenden , es gibt jedoch kein Arbeitsblatt mit dem Namen "Profit 2019".

In diesen Fällen müssen wir den Fehler ignorieren und den Code weiter ausführen, wenn das Arbeitsblatt nicht in der Arbeitsmappe vorhanden ist, indem wir den Fehler "Index außerhalb des Bereichs" ignorieren.

Die nächste Zeile im Code lautet

Arbeitsblätter ("Profit"). Visible = xlVeryHidden

Dieses Arbeitsblatt ist in dieser Arbeitsmappe vorhanden. Ohne den Fehler zu ignorieren, können wir nicht zu dieser Codezeile wechseln.

Um diesen Fehler zu ignorieren, müssen wir die Anweisung "On Error Resume Next" hinzufügen.

Code:

Sub On_Error () On Error Resume Next Worksheets ("Sales"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Wie Sie oben sehen können, habe ich die Anweisung oben im Code hinzugefügt, bevor eine der Zeilen beginnt. Führen Sie nun den Code aus und sehen Sie, was passiert.

Jetzt bin ich in der Zeile, die zuvor den Fehler erhalten hat, drücke die Taste F8 und sehe, was passiert.

Ich bin zur nächsten Codezeile gesprungen, ohne einen Fehler anzuzeigen, da oben eine Anweisung hinzugefügt wurde, nämlich die VBA-Anweisung "On Error Resume Next".

Beispiel 2

Jetzt werden wir anhand eines weiteren Beispiels sehen, wie diese Anweisung verwendet wird. Schauen Sie sich die folgende Datenstruktur für dieses Beispiel an.

Wir haben zwei Tabellen über der ersten Tabelle, die Emp-Namen und deren Gehaltsdetails in der zweiten Tabelle enthalten, und wir haben nur Emp-Namen. Wenn Sie also VLOOKUP verwenden, müssen Sie die Gehaltsdetails aus der linken Seitentabelle abrufen.

Unten ist der Code, den ich geschrieben habe, um die Details abzurufen.

Code:

Sub On_Error1 () Dim k As Long For k = 2 bis 8 Zellen (k, 6) .Value = WorksheetFunction.VLookup (Zellen (k, 5), Range ("A: B"), 2, 0) Next k End Sub

Führen Sie nun den Code Zeile für Zeile aus und sehen Sie, was passiert.

Beim Ausführen des ersten Zellencodes haben wir das Ergebnis für den ersten Mitarbeiter. Wiederholen Sie dies auch für den zweiten Mitarbeiter.

Diesmal haben wir die Fehlermeldung erhalten. Schauen wir uns den zweiten Mitarbeiternamen in der Tabelle an.

Der zweite Mitarbeitername lautet "Gayathri", aber dieser Name ist in der ersten Tabelle nicht vorhanden, sodass die VBA VLOOKUP-Funktion den Fehler "# N / A" nicht zurückgibt, wenn der VLOOKUP den Suchwert von nicht findet Tabelle; Vielmehr wird die obige Fehlermeldung angezeigt.

Unser Ziel ist es, wenn der Name des Mitarbeiters nicht in der Tabelle gefunden wird, wir eine leere Zelle für diesen Mitarbeiter benötigen und den Fehler ignorieren und Ergebnisse für die verbleibenden Namen angeben.

Wir müssen die Anweisung "On Error Resume Next" in die Schleife einfügen.

Code:

Sub On_Error1 () Dim k As Long For k = 2 bis 8 On Error Resume Next Cells (k, 6) .Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0 ) Weiter k End Sub

Führen Sie nun den Code aus und sehen Sie das Ergebnis.

Zwei Mitarbeiternamen, " Gayathri & Karanveer ", sind nicht in der Liste enthalten. Daher müssen diese Zeilencodes auf einen Fehler gestoßen sein, da wir die Fehlerbehandlungsanweisung " On Error Resume Next " hinzugefügt haben. Diese Codezeile wurde ignoriert und fortgesetzt für den nächsten Mitarbeiter.

Dinge, an die man sich hier erinnern sollte

  • "On Error Resume Next" ist die Fehlerbehandlungsanweisung, wenn der bekannte Fehler ignoriert werden muss.
  • Wenn Sie die Fehlermeldung nur für einen bestimmten Codesatz ignorieren möchten, schließen Sie die Anweisung on error resume next, indem Sie die Anweisung " On Error GoTo 0 " hinzufügen .

Interessante Beiträge...