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

Forumthread: mit on error 2 goto mal Fehler abfangen

mit on error 2 goto mal Fehler abfangen
chris
Hallo VBA experten,
ich habe mal eine frage.Wollte gerade einmal on error Funktion testen.
leider klappt das nicht so wie ich es möchte.
ich habe unten stehenden Code.
on dieser Zeile "Cells(x, 1) = "test"" sprngt mein Makro zur Sprungmarke "fehler1:"
dann drücke ich mit F8(Einzelschritt) weiter bis zu dieser zeile "Cells(1, x) = "ok""
dann sollte meiner Meinung nach das Makro zur Sprungmarke "fehler2" springen.
Macht es aber nicht.Es kommt nur der Fehler laufzeitfehler 1004
Warum ? Wie ist das möglich was ich vor habe. Also das beim zweiten fehler zur zweiten Sprungmarke gesprungen wird ?
Vielen dank für eure Hilfe im voraus.
gruß Chris
Sub neu()
On Error GoTo fehler1
Cells(x, 1) = "test"
fehler1:
MsgBox ("1")
On Error GoTo 0
On Error GoTo fehler2
Cells(1, x) = "ok"
fehler2:
MsgBox ("2")
End Sub

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
...Weil dieser Aufbau dir gar nichst nützt,...
14.09.2009 12:26:57
Luc:-?
...denn eine evtl vorhandene Fehlerreaktion wird schon am Proz'anfang erkannt und festgelegt, Chris!
Außerdem sehe ich in deiner Proz nichts, was einen Fehler auslösen könnte wie bspw Err.Raise 999999...
Gruß Luc :-?
X ist doch leer....(nicht sichtbar deklariert)
14.09.2009 12:43:27
NoNet
Moin Luc,

Außerdem sehe ich in deiner Proz nichts, was einen Fehler auslösen könnte 
Aber ich : die Variable X wurde zumindest nicht in diesem SUB deklariert und ist daher (vermutlich) LEER, so dass sie weder als Zeilen- noch als Spaltenindex der CELLS-Eigenschaft verwendet werden kann !
Mit der Bemerkung bzgl. des Error-Handlers hast Du vermutlich Recht - obwohl das in der OH nicht ausdrücklich erwähnt wird, dass keine zweite Fehlerbehandlung innerhalb der gleichen SUB möglich ist !
Lediglich folgender Satz ist wohl ein Hinweis darauf :
On Error GoTo 0 deaktiviert die Fehlerbehandlung in der aktuellen Prozedur.

Das lässt vermuten, dass eine erneute Aktivierung nun nicht mehr möglich ist, weshalb das 2.Errorhandling nicht mehr aktiv wird !
Gruß, NoNet
Anzeige
...Außerdem steht da wohl auch so etwas wie...
14.09.2009 13:18:03
Luc:-?
...in einer Fehlerbehandlung kann kein Fehler ausgelöst wdn, NoNet,
oder ...kann kein weiterer Fehler behandelt wdn...
Naja, egal, meine F-Behdl machen stets das, was sie sollen... ;-)
Gruß (auch an Erich oder war's Rudi...?), Luc :-?
on error goto - zwei mal Fehler abfangen
14.09.2009 12:56:02
Erich
Hi Chris,
vielleicht ist das Fehlerhandling so etwas klarer:

Option Explicit      ' immer zu empfehlen
Sub neu2()
Dim x As Long
On Error GoTo fehler1
Cells(x, 1) = "test"
On Error GoTo fehler2
Cells(x, 1) = "ok"
fehler1:
MsgBox ("1")
On Error GoTo 0
Err.Clear
Resume Next
fehler2:
MsgBox ("2")
On Error GoTo 0
End Sub
Sub neu3()
Dim x As Long
On Error GoTo fehler1
Cells(x, 1) = "test"
On Error GoTo fehler2
Cells(x, 1) = "ok"
MsgBox "Fertig"
Exit Sub
fehler1:
MsgBox ("1")
On Error GoTo 0
Err.Clear
Resume Next
fehler2:
MsgBox ("2")
On Error GoTo 0
Err.Clear
Resume Next
End Sub
@Luc: Dass x=0 schon für einen Fehler sorgt, hat NoNet dier ja schonb geschrieben...
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: on error goto - zwei mal Fehler abfangen
14.09.2009 14:07:38
chris
Hallo vielen dank an ale Antworter !!!!
Das ich die variable nicht deklariert habe war absicht.
Wollte ja in meinem beispiel einen fehler Provozieren.
Hallo erich,
super Beispiel.
Genau so wollte ich das mal sehen.
Jezt verstehe ich die on error schon viel besser :)
danke an alle und schönen Tag noch !
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 mit On Error und Goto


Schritt-für-Schritt-Anleitung

  1. Codestruktur verstehen: Beginne mit dem Verständnis der On Error-Anweisung. Diese Anweisung ermöglicht es dir, Fehler abzufangen und die Kontrolle zu einem spezifischen Teil deines Codes zu leiten, anstatt das Makro abrupt zu beenden.

  2. Fehlerbehandlung einrichten: Setze die Fehlerbehandlung in deinem Sub ein:

    Sub beispiel()
       On Error GoTo fehler1
       ' Dein Code hier
       Exit Sub
    fehler1:
       MsgBox "Ein Fehler ist aufgetreten!"
    End Sub
  3. Zusätzliche Fehlerbehandlungen: Wenn du mehrere Fehler abfangen möchtest, kannst du mehrere On Error GoTo-Anweisungen nutzen. Beachte, dass du nach einem Fehlerhandling mit On Error GoTo 0 die Fehlerbehandlung zurücksetzen musst.

  4. Variable deklarieren: Achte darauf, dass du alle verwendeten Variablen deklariert hast. In unserem Beispiel könnte die Variable x nicht deklariert sein, was zu Laufzeitfehlern führen kann.


Häufige Fehler und Lösungen

  • Fehler 1004: Dieser Fehler tritt häufig auf, wenn eine Zelle nicht wie erwartet adressiert wird. Stelle sicher, dass deine Variablen ordnungsgemäß deklariert und initialisiert sind.

  • On Error GoTo 0 nicht beachtet: Wenn du On Error GoTo 0 vergisst, wird die Fehlerbehandlung möglicherweise nicht zurückgesetzt, was dazu führt, dass nachfolgende Fehler nicht mehr richtig behandelt werden.

  • Variable x uninitialisiert: Wenn die Variable x nicht gesetzt ist, wird dies einen Fehler auslösen. Stelle sicher, dass x einen gültigen Wert hat, bevor du es in Cells(x, 1) verwendest.


Alternative Methoden

  • On Error Resume Next: Diese Anweisung überspringt Fehler und fährt mit der nächsten Zeile fort. Verwende sie mit Bedacht, da sie dazu führen kann, dass Fehler unbemerkt bleiben:

    On Error Resume Next
    ' Code, der einen Fehler verursachen könnte
  • Fehlerprotokollierung: Anstatt Fehler einfach zu ignorieren, könntest du eine Protokollierung implementieren, um zu verfolgen, welche Fehler auftreten und wo.


Praktische Beispiele

Hier ist ein einfaches Beispiel einer Fehlerbehandlung in VBA:

Sub FehlerHandling()
    Dim x As Long
    On Error GoTo fehler1
    x = 0
    Cells(x, 1) = "test" ' Dies wird einen Fehler auslösen
    Exit Sub
fehler1:
    MsgBox "Fehler aufgetreten: " & Err.Description
    On Error GoTo 0 ' Fehlerbehandlung zurücksetzen
End Sub

In diesem Beispiel wird ein Fehler behandelt, wenn x auf 0 gesetzt ist, was zu einem Laufzeitfehler führt.


Tipps für Profis

  • Verwenden von Resume Next: Wenn du einen Fehler abfängst und trotzdem mit der nächsten Zeile fortfahren möchtest, nutze Resume Next nach dem Fehlerhandling.

  • Vermeidung von verschachteltem Fehlerhandling: Es ist ratsam, in einer Prozedur nicht mehrere On Error GoTo Anweisungen zu verwenden, da dies die Lesbarkeit und Wartbarkeit des Codes beeinträchtigen kann.

  • Option Explicit verwenden: Diese Anweisung zwingt dich, alle Variablen zu deklarieren, was hilft, viele Fehler zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Fehler in einem Sub behandeln? Du kannst mehrere On Error GoTo Anweisungen verwenden, jedoch solltest du sicherstellen, dass du die Fehlerbehandlung ordnungsgemäß zurücksetzt mit On Error GoTo 0.

2. Was ist der Unterschied zwischen On Error GoTo und On Error Resume Next? On Error GoTo leitet die Kontrolle zu einer bestimmten Fehlerbehandlungsroutine, während On Error Resume Next einfach den nächsten Befehl ausführt, ohne auf den Fehler zu reagieren.

3. Warum funktioniert vba on error goto manchmal nicht? Wenn du nach einem Fehlerhandling nicht On Error GoTo 0 verwendest, wird die Fehlerbehandlung möglicherweise nicht zurückgesetzt, wodurch die erneute Fehlerbehandlung nicht mehr funktioniert.

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