Fehlerbehandlungsroutinen für Excel-Makros

Fehlerbehandlungsroutinen

können Sie festlegen, was passiert, wenn ein Fehler auftritt, während die Excel-Makro-Code ausgeführt wird. Fehler-Handler sind Zeilen ähnlich der folgenden:

On Error GoTo MyError

Ohne Fehler-Handler, jeder Fehler, die in Ihrem Code auftritt, wird Excel aufgefordert, einen weniger als hilfreich Fehlermeldung zu aktivieren, die normalerweise nicht klar vermitteln, was passiert ist. Doch mit Hilfe der Fehlerbehandlung können Sie wählen, um den Fehler zu ignorieren oder den Code ordnungsgemäß mit Ihrer eigenen Mitteilung an den Benutzer zu verlassen.

Es gibt drei Arten von On Error-Anweisungen:

  • On Error GoTo SomeLabel: Der Code springt zu dem angegebenen Label.

  • On Error Resume Next: Der Fehler wird ignoriert, und der Code wird fortgesetzt.

  • On Error GoTo 0: VBA setzt den normalen Fehlerprüfung Verhalten.

On Error GoTo SomeLabel

Manchmal kann ein Fehler im Code bedeutet, dass Sie anmutig um den Vorgang zu beenden und den Benutzern eine klare Botschaft geben. In diesen Situationen können Sie die On Error GoTo-Anweisung verwenden, um Excel zu sagen, zu einer bestimmten Zeile Code zu springen.

Zum Beispiel in der folgenden kleines Stück Code, sagen Sie Excel den Wert in Zelle A1 durch den Wert in der Zelle A2 zu unterteilen und dann die Antwort in der Zelle A3 schalten. Einfach. Was könnte schiefgehen?

Sub Macro1 () Range ( "A3"). Value = Range ( "A1"). Value / Range ( "A2"). ValueEnd Sub

Wie sich herausstellt, zwei wichtige Dinge schief gehen kann. Wenn die Zelle A2 0 enthält, erhalten Sie eine Division durch 0 Fehler. Wenn die Zelle A2 einen nicht-numerischen Wert enthält, erhalten Sie einen Typenkonfliktfehler.

Um eine fiese Fehlermeldung zu vermeiden, können Sie Excel sagen, dass On Error Sie die Codeausführung wollen auf das Etikett zu springen genannt myExit.

Im folgenden Code wird die myExit Etikett durch eine Nachricht an den Benutzer gefolgt, die anstelle einer fiesen Fehlermeldung freundliche Ratschläge gibt. Beachten Sie auch die Exit Sub Zeile vor dem myExit-Label, das sicherstellt, dass der Code wird einfach beendet, wenn kein Fehler aufgetreten:

Sub Macro1 () On Error GoTo MyExitRange ( "A3") Wert = Range ( "A1") Wert / Bereich ( "A2") ValueExit SubMyExit:... MsgBox "Bitte benutzen Sie Valid Zahlen ungleich Null" End Sub

On Error Resume Next

Manchmal möchten Sie Excel einen Fehler zu ignorieren und einfach den Code wieder aufnehmen läuft. In diesen Situationen können Sie die On Error Resume Next-Anweisung verwenden.

Zum Beispiel wird das folgende Stück Code bedeutete eine Datei namens GhostFile.exe aus dem C zu löschen: Temp-Verzeichnis. Nachdem die Datei gelöscht wird, sagt eine nette Nachricht Feld den Benutzer, dass die Datei verschwunden ist:

Sub Macro1 () Kill "C: Temp GhostFile.exe" MsgBox "Datei gelöscht wurde." End Sub

Der Code funktioniert großartig, wenn es tatsächlich eine Datei zu löschen. Aber wenn aus irgendeinem Grund nannte die Datei GhostFile.exe nicht im Laufwerk C: vorhanden Temp, wird ein Fehler ausgelöst.

In diesem Fall ist es egal Sie nicht, wenn die Datei nicht vorhanden ist, weil Sie es würden ohnehin zu löschen. So können Sie einfach den Fehler ignorieren und mit dem Code zu bewegen.

Durch die Verwendung der On Error Resume Next-Anweisung, wird der Code seinen Lauf, ob die Zieldatei vorhanden ist:

Sub Macro1 () On Error Resume NextKill "C: Temp GhostFile.exe" MsgBox "Datei wurde gelöscht." End Sub

On Error GoTo 0

Wenn bestimmte Fehler Aussagen verwenden, kann es notwendig sein, die Fehlerprüfung Verhalten von VBA zurücksetzen. Um zu verstehen, was das bedeutet, einen Blick auf das nächste Beispiel.

Hier möchten Sie zuerst eine Datei zu löschen genannt GhostFile.exe aus dem Verzeichnis C: Temp-Verzeichnis. Um Fehler zu vermeiden, die sich daraus ergeben sich möglicherweise, dass die gezielte Datei nicht existiert, verwenden Sie die On Error Resume Next-Anweisung. Danach versuchen Sie, indem man 100 / Mike etwas suspekt Mathematik zu tun:

Sub Macro1 () On Error Resume NextKill "C: Temp GhostFile.exe" Range ( "A3") Wert = 100 / "Mike" End Sub.

Dieses Stück Code ausgeführt wird, sollte ein Fehler aufgrund der Fuzzy-Mathematik erzeugen, aber es funktioniert nicht. Warum? Da die letzte Anweisung, die Sie auf den Code gab On Error Resume Next war. Jeder Fehler nach dieser Zeile wird effektiv ignoriert.

Um dieses Problem zu beheben, können Sie die On Error GoTo 0 Anweisung verwenden, um normale Fehlerprüfung Verhalten wieder auf:

Sub Macro1 () On Error Resume NextKill "C: Temp GhostFile.exe" On Error GoTo 0range ( "A3") Wert = 100 / "Mike" End Sub.

Dieser Code wird Fehler bis zum GoTo On Error 0 Anweisung ignorieren. Nach dieser Aussage geht der Code wieder in den normalen Fehlerprüfung und löst den erwarteten Fehler aus der Fuzzy-Mathematik stammen.

Menü