Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: On Error funktioniert nur einmal

On Error funktioniert nur einmal
22.02.2005 13:39:45
Werner
Hallo,
ich verwende zum Abfangen von Fehlern die Anweisung "On Error GoTo Bei_Fehler".
Ich habe zum Testen absichtlich einen Fehler eingebaut (unverträgliche Typen), dann springt Excel auch zu Bei_Fehler.
Aber sobald der nächste Fehler kommt, bricht Excel mit der Meldung "Typen unverträglich (Beenden oder Debuggen)" ab!
Ich habe bei Bei_Fehler auch Err.Clear verwendet.
Warum geht On Error nur das 1.Mal ?
Danke!
Werner.
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: On Error funktioniert nur einmal
22.02.2005 13:51:30
Anton
Servus Werner,
versuch's mal mit "option exclicit"
Hat mir bei ähnlicher Situation gut geholfen.
(Aber was erzähle ich einem VBA-Könner....)
Gruss
Anton
AW: On Error funktioniert nur einmal
22.02.2005 13:56:46
Werner
Hallo Anton!
Das Option Explicit hab ich immer eingebaut!
AW: On Error funktioniert nur einmal
EtoPHG
Hallo Anton,
Steht in Deiner Routine ein Resume Next ? oder was.
Sonst poste mal den Code/Blatt
Gruss Hansueli
Anzeige
AW: On Error funktioniert nur einmal
22.02.2005 14:08:43
Werner
Hallo Hansueli,
nein, aber ich verwende das in einer Do While-Loop-Schleife (beim Einlesen einer Datei):
Do While EOF(1)
On Error GoTo Bei_Fehler
Line Input #1, textzeile
(hier lese ich die Felder ein, und verwende zum Fehlertest extra falsche Typen,
also String statt Integer, damit er zu Bei_Fehler springt)
Bei_Fehler:
Err.Clear
MsgBox ...
Loop
Gruß Werner.
Anzeige
AW: On Error funktioniert nur einmal
Klausi
Hi Werner,
Setze man On Error GoTo 0
vor das On Error Goto Bei_Fehler
Ich habe es nicht ausprobiert, muesste aber klappen.
Was definitiv klappt ist:
Err.Clear
On Error Resume Next ' to catch/avoid an mysterious type mismatch error
...
Dein Einlesen
...
If Err.Number Then
Sh.Range("N" & CStr(i)).NoteText "Error while calculating"
End If
Hat zumindest bei mir geklappt.
Ciao
Klausi
Anzeige
AW: On Error funktioniert nur einmal
EtoPHG
Hallo Werner,
Das funktioniert anders

Sub x()
On Error GoTo Bei_Fehler
While
Deine CodeZeilen
Loop
Exit sub
Bei_Fehler:
Msgbox ...
Err.Clear
Resume Next
End Sub

Gruss Hansueli
AW: On Error funktioniert nur einmal
22.02.2005 15:36:12
Werner
Hallo Klausi & Hansueli,
Danke für Eure Antworten!
Mit Resume hat es jetzt funktioniert!
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Fehlerbehandlung in Excel VBA: On Error richtig nutzen


Schritt-für-Schritt-Anleitung

  1. Fehlerbehandlung aktivieren: Du kannst die Fehlerbehandlung in VBA mit der Anweisung On Error GoTo <Label> aktivieren. Ersetze <Label> durch den Namen der Stelle, zu der der Code springen soll, wenn ein Fehler auftritt.

    Sub Beispiel()
       On Error GoTo Fehlerbehandlung
       ' Dein Code hier
       Exit Sub
    Fehlerbehandlung:
       MsgBox "Ein Fehler ist aufgetreten!"
    End Sub
  2. Fehler zurücksetzen: Wenn du den Fehler behandelt hast, kannst du Err.Clear verwenden, um den Fehlerstatus zurückzusetzen.

  3. Resume verwenden: Nutze Resume Next, um die Ausführung nach einem Fehler dort fortzusetzen, wo sie unterbrochen wurde.

    Sub BeispielMitResume()
       On Error GoTo Fehlerbehandlung
       ' Dein Code hier
       Exit Sub
    Fehlerbehandlung:
       MsgBox "Ein Fehler ist aufgetreten!"
       Err.Clear
       Resume Next
    End Sub

Häufige Fehler und Lösungen

  • Fehler tritt nur einmal auf: Wenn du die Anweisung On Error GoTo verwendest, kann es vorkommen, dass nach dem ersten Fehler kein weiterer Fehler abgefangen wird. Stelle sicher, dass du Err.Clear und Resume Next nach dem Fehler verwendest.

  • Typen unverträglich: Wenn du in einer Schleife arbeitest, kann ein On Error Resume Next helfen, um einen Fehler zu ignorieren, aber sei vorsichtig, dass du nicht wichtige Fehler überspringst.


Alternative Methoden

  • On Error Resume Next: Diese Anweisung ignoriert alle Fehler und fährt mit dem nächsten Befehl fort. Nutze sie mit Bedacht, da du so möglicherweise wichtige Fehler nicht bemerkst.

    On Error Resume Next
    ' Dein Code hier
    If Err.Number <> 0 Then
       MsgBox "Ein Fehler ist aufgetreten!"
    End If
  • On Error GoTo 0: Mit dieser Anweisung kannst du die aktive Fehlerbehandlung abschalten. Sie ist nützlich, wenn du sicherstellen möchtest, dass nachfolgende Fehler auf die Standardbehandlung zurückgesetzt werden.


Praktische Beispiele

Hier sind einige praktische Szenarien zur Verwendung von On Error in Excel VBA:

  1. Einlesen von Dateien:

    Sub DateiEinlesen()
       On Error GoTo Fehlerbehandlung
       Dim textzeile As String
       Open "C:\Datei.txt" For Input As #1
       Do While Not EOF(1)
           Line Input #1, textzeile
           ' Verarbeitung des Textes
       Loop
       Close #1
       Exit Sub
    Fehlerbehandlung:
       MsgBox "Fehler beim Einlesen der Datei!"
       Err.Clear
       Resume Next
    End Sub
  2. Berechnungen:

    Sub Berechnung()
       On Error GoTo Fehlerbehandlung
       Dim a As Integer, b As Integer, c As Integer
       a = 10
       b = 0
       c = a / b ' Division durch Null
       Exit Sub
    Fehlerbehandlung:
       MsgBox "Berechnungsfehler!"
       Err.Clear
       Resume Next
    End Sub

Tipps für Profis

  • Verwende Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler wie Typenunverträglichkeiten zu vermeiden.

  • Überlege, ob du für komplexe Fehlerbehandlungen separate Fehlerhandler verwenden möchtest, um die Lesbarkeit deines Codes zu verbessern.

  • Dokumentiere deine Fehlerbehandlungsroutinen gut, damit du und andere Entwickler verstehen, wie und warum Fehler abgefangen werden.


FAQ: Häufige Fragen

1. Warum funktioniert On Error GoTo nur einmal? Es kann sein, dass der Fehlerstatus nicht zurückgesetzt wurde. Stelle sicher, dass du Err.Clear und Resume korrekt verwendest.

2. Was ist der Unterschied zwischen On Error Resume Next und On Error GoTo? On Error Resume Next ignoriert Fehler, während On Error GoTo zu einem definierten Fehlerbehandlungsblock springt.

3. Wie kann ich mehrere Fehler in einer Schleife behandeln? Nutze On Error Resume Next am Anfang der Schleife und überprüfe nach jedem kritischen Befehl den Err.Number.

4. Was passiert, wenn ich Resume Next nach einem Fehler verwende? Der Code wird an die nächste Zeile nach dem Fehler fortgesetzt, was hilfreich sein kann, wenn du den Fehler ignorieren möchtest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige