VBA bei Fehler Fortsetzen als nächstes oder Gehe zu 0

In diesem Tutorial werden die VBA On Error Resume Next- und Goto-Anweisung erläutert.

Selbst wenn Ihr Code perfekt konstruiert ist, kann der Benutzer möglicherweise nicht das tun, was Sie erwarten. Aus diesem Grund müssen Sie Fehlerhandler in Ihren Code einfügen, wenn ein Grund für das Auftreten eines Fehlers vorliegen könnte.

Bei Fehler Fortsetzen als nächstes

Die Anweisung On Error Resume Next weist VBA an, alle Codezeilen mit Fehlern zu überspringen und mit der nächsten Zeile fortzufahren. VBA ignoriert die Zeile oder Zeilen mit einem Fehler darin und geht zur nächsten Codezeile über.

Dies ist nützlich, wenn die Codezeile, die ignoriert werden kann, für die erfolgreiche Ausführung des Makros nicht entscheidend ist, aber bei falscher Verwendung ziemlich gefährlich sein kann, da dies zu unbeabsichtigten Ergebnissen führen kann.

Zum Beispiel im folgenden Verfahren:

123456 Unter HideAllSheets()Dim ws als ArbeitsblattFür jedes ws in ActiveWorkbook.Sheetsws.Visible = FalseNächstes wsEnd 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.

Wenn wir jedoch das Verfahren wie unten gezeigt ändern, wird der Code nach dem Fehler fortgesetzt und das letzte Blatt in der Arbeitsmappe sichtbar bleiben.

1234567 Unter HideAllSheets()Bei Fehler Fortsetzen als nächstesDim ws als ArbeitsblattFür jedes ws in ActiveWorkbook.Sheetsws.Visible = FalseNächstes wsEnd Sub

Bei Fehler GoTo 0

Wenn wir keinen Fehlerhandler in unserem Code haben, Bei Fehler Gehe zu 0 ist die Standardeinstellung von Excel. Dies bedeutet im Wesentlichen, dass beim Auftreten eines Fehlers mit Bei Fehler GoTo 0, VBA beendet die Ausführung von Code und zeigt das Standardfehlermeldungsfeld an, zum Beispiel:

Wenn wir eine Fehlerfalle platziert haben wie Bei Fehler Fortsetzen als nächstes in unserem Code, aber dann möchten wir den Fehler auf den Standard zurücksetzen, können wir ein . einfügen Bei Fehler Gehe zu 0 Zeile in unseren Code.

12345678910 UnterfehlerGoTo0()Bei Fehler Fortsetzen als nächstesDim ws als ArbeitsblattFür jedes ws in ActiveWorkbook.Sheetsws.Visible = FalseNächstes wsBei Fehler GoTo 0'Weiteren Code hier ausführen, zum Beispiel:ActiveSheet.Name = "Sheet1"End Sub

Wenn jetzt ein Fehler in unserem Code nach dem Bei Fehler Gehe zu 0 Leitung, würde die Standardfehlermeldung für Excel auftreten. In diesem Beispiel haben wir bereits ein Blatt namens Sheet1 in der ActiveWorkbook als Code über dem Bei Fehler Gehe zu 0 blendet das Blatt aus, löscht es jedoch nicht. Dann wird die standardmäßige Excel-Fehlermeldung angezeigt, die angibt, dass der Blattname bereits vergeben wurde.

Bei Fehler Gehe zu Leitung

Wir können unseren Code auch zwingen, in eine andere Codezeile zu wechseln, indem wir die Bei Fehler Gehe zu Leitung die VBA anweist, zu einer bestimmten Codezeile zu gehen, wenn ein Fehler auftritt.

123456789101112 Sub ErrorGoToLine()Bei Fehler Fortsetzen als nächstesDim ws als ArbeitsblattFür jedes ws in ActiveWorkbook.Sheetsws.Visible = FalseNächstes wsBei Fehler GoTo FehlerhandlerActiveSheet.Name = "Sheet1"Abo beendenFehler:MsgBox("Es gibt bereits ein Blatt namens sheet1!", vbCritical)End Sub

Wenn der Code im obigen Beispiel das Blatt „Sheet1“ findet, wechselt er in die Codezeile unter der Fehlerbehandlungsbezeichnung – in diesem Fall ruft er ein benutzerdefiniertes Meldungsfeld auf, das die Benutzer darüber informiert, dass das Blatt bereits beendet wurde. Nach dem Fehlerhandler-Label muss ein Doppelpunkt stehen, um VBA anzuzeigen, dass es sich um ein Label handelt.

1 Fehler:

Der Code springt dann in die Zeile unter dem Etikett und gibt das benutzerdefinierte Meldungsfeld zurück.

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-Nachricht immer eine Option zum Debuggen des Codes bietet.

Wir brauchen auch eine Abo beenden im Verfahren. Wenn da ist NICHT ein Blatt mit dem Namen Sheet1, dann würde diese Codezeile ausgeführt und das aktive Blatt in Sheet1 umbenannt. Wir möchten dann, dass der Code endet - wir möchten nicht, dass er zum Fehlerhandler weitergeht und das Meldungsfeld anzeigt. Die Zeile Exit Sub beendet dann die Prozedur und stoppt den Code.

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave