Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: On Error go to in for next schleife

On Error go to in for next schleife
06.08.2015 17:42:35
Bonduca
Hallo,
Wenn durch 0 dividiert wird, soll der Code die Zelle leer lassen und bei der nächsten weitermachen.
Er geht mir aber nicht mehr in die For Next Schleife rein. Ich hab schon einiges ausprobiert, aber es klappt nicht. :(
Sub Dividieren()
On Error GoTo Sprungmarke
Dim Divid As Double
Worksheets("A").Activate
For i = 1 To 3
neubeginnen:
Divid = Worksheets("A").Cells(2 + i, 3) / Worksheets("A").Cells(3, 1)
Worksheets("B").Cells(i + 4, 2) = Worksheets("A").Cells(i + 2, 4)
Worksheets("B").Cells(i + 4, 3) = Divid
Next
Sprungmarke:
i = i + 1
GoTo neubeginnen
End Sub
LG

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: On Error go to in for next schleife
06.08.2015 17:50:31
Nepumuk
Hallo,
an Stelle von Goto so:

Resume Neubeginnen

Gruß
Nepumuk

AW: On Error go to in for next schleife
06.08.2015 18:04:43
Nepumuk
Hallo,
damit du nicht in eine Endlosschleife gerätst, so:
Sub Dividieren()
On Error GoTo Sprungmarke
Dim Divid As Double
Worksheets("A").Activate
For i = 1 To 3
Divid = Worksheets("A").Cells(2 + i, 3) / Worksheets("A").Cells(3, 1)
Worksheets("B").Cells(i + 4, 2) = Worksheets("A").Cells(i + 2, 4)
Worksheets("B").Cells(i + 4, 3) = Divid
neubeginnen:
Next
Exit Sub
Sprungmarke:
Resume neubeginnen
End Sub

Gruß
Nepumuk

Anzeige
AW: On Error go to in for next schleife
06.08.2015 18:02:29
Daniel
Hi
wenn die Fehlerursache eindeutig ist und ohne grossen Aufwand geprüft werden kann, sollte man keine Fehlerbehandlung einbauen, sondern die mögliche Fehlerursache direkt abfragen, so das erst gar kein Fehler entsteht.
hier also:

If Worksheets("A").Cells(3, 1)  0 Then
du verwendest als Divisor immer die gleiche Zelle.
wenn in dieser Zelle ein Fix-Wert steht, dann kannst du die Prüfung auch ausserhalb der Schleife machen, weil sich dann der Divisor innerhalb der Schleife nicht mehr ändert.
in deinem Beispiel ist die Prüfung innerhalb nur dann erforderlich wenn in der Zelle A3 eine Formel steht, die von den Zellen, die in der Schleife geändert werden abhängig ist und so während dem Schleifenlauf ihren Wert ändern kann.
Gruß Daniel

Anzeige
AW: On Error go to in for next schleife
07.08.2015 12:16:36
Bonduca
Klasse. Vielen Dank! Es funktioniert :D
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Fehlerbehandlung in VBA: On Error GoTo in einer For Next Schleife


Schritt-für-Schritt-Anleitung

Um eine effektive Fehlerbehandlung in einer For Next Schleife in Excel VBA zu implementieren, kannst Du die On Error GoTo Anweisung verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung, um sicherzustellen, dass der Code bei einem Fehler (z.B. Division durch Null) nicht abbricht:

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel (Alt + F11).
  2. Erstelle ein neues Modul und füge den folgenden Code ein:
Sub Dividieren()
    On Error GoTo Sprungmarke
    Dim Divid As Double
    Worksheets("A").Activate
    For i = 1 To 3
        Divid = Worksheets("A").Cells(2 + i, 3) / Worksheets("A").Cells(3, 1)
        Worksheets("B").Cells(i + 4, 2) = Worksheets("A").Cells(i + 2, 4)
        Worksheets("B").Cells(i + 4, 3) = Divid
    Next
    Exit Sub
Sprungmarke:
    ' Hier kannst Du optional eine Nachricht ausgeben oder eine Zelle leeren
    Worksheets("B").Cells(i + 4, 3) = "Fehler"
    Resume Next
End Sub
  1. Achte darauf, dass Du die Namen der Arbeitsblätter ("A" und "B") an Deine Gegebenheiten anpasst.

Häufige Fehler und Lösungen

  • Fehler: Code bricht ab und geht nicht in die Schleife zurück.

    • Lösung: Stelle sicher, dass Du die Resume Next Anweisung im Sprungmarkenblock korrekt platziert hast. Diese Anweisung sorgt dafür, dass der Code mit dem nächsten Befehl fortfährt, ohne die Schleife zu verlassen.
  • Endlosschleife bei Fehlern.

    • Lösung: Vermeide es, dass Du immer wieder in die Sprungmarke springst, indem Du sicherstellst, dass der Fehler nicht erneut auftritt. Beispielweise prüfe, ob der Divisor gleich Null ist, bevor Du die Division durchführst.

Alternative Methoden

Eine alternative Methode zur Fehlerbehandlung in Excel VBA ist die Verwendung von On Error Resume Next. Diese Anweisung ignoriert alle Fehler und fährt mit dem nächsten Befehl fort. Hier ein Beispiel:

Sub DividierenMitResumeNext()
    Dim Divid As Double
    Worksheets("A").Activate
    For i = 1 To 3
        On Error Resume Next
        Divid = Worksheets("A").Cells(2 + i, 3) / Worksheets("A").Cells(3, 1)
        On Error GoTo 0 ' Fehlerbehandlung zurücksetzen
        Worksheets("B").Cells(i + 4, 2) = Worksheets("A").Cells(i + 2, 4)
        Worksheets("B").Cells(i + 4, 3) = Divid
    Next
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von Fehlerbehandlungsanweisungen in VBA:

  1. Division durch Null vermeiden:
If Worksheets("A").Cells(3, 1).Value <> 0 Then
    Divid = Worksheets("A").Cells(2 + i, 3) / Worksheets("A").Cells(3, 1)
Else
    Worksheets("B").Cells(i + 4, 3) = "Keine Division durch Null"
End If
  1. Fehlermeldungen ausgeben:
If Err.Number <> 0 Then
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
    Resume Next
End If

Tipps für Profis

  • Nutze die On Error Resume Next Anweisung mit Bedacht. Sie kann nützlich sein, sollte aber nicht übermäßig verwendet werden, da sie alle Fehler ignoriert.
  • Überlege, ob Du die Fehlerursache vorher abfragen kannst, um Fehler zu vermeiden, anstatt sie zu behandeln (z.B. durch eine Vorabprüfung des Divisors).
  • Halte Deinen Code lesbar, indem Du klare Kommentare einfügst, besonders in der Fehlerbehandlung.

FAQ: Häufige Fragen

1. Was passiert, wenn ich On Error GoTo nicht verwende? Ohne diese Anweisung wird der VBA-Code bei einem Fehler sofort abgebrochen und eine Fehlermeldung angezeigt.

2. Kann ich die Fehlerbehandlung auch für andere Schleifen verwenden? Ja, Du kannst On Error GoTo in jeder Art von Schleife verwenden, sei es For Next, Do While oder While Wend.

3. Wie kann ich sicherstellen, dass mein Code nicht in eine Endlosschleife gerät? Vergewissere Dich, dass Du im Fehlerfall die Schleifenvariable korrekt aktualisierst und Bedingungen überprüfst, die verhindern, dass der Fehler erneut auftritt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige