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

Forumthread: For Schleife unterbrechen und fortsetzen

For Schleife unterbrechen und fortsetzen
19.08.2020 17:19:38
Manuel
Hallo Leute
Ich brauche mal wieder eure Hilfe weil ich im Internet nichts passendes dazu Finde:
Wie kann man eine For Schleife unterbrechen und per Befehl (If Bedingung oder Button) wieder fortsetzten.
Hintergrund ist dies, dass während der Schleife Eingaben in einer Userform erfolgen müssen. Erst bei Bestätigung soll die Schleife fortgesetzt werden.
Exit For Bzw. Next beendet meines Wissens die Schleife....
Vielen Dank im Voraus
Manuel
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For Schleife unterbrechen und fortsetzen
19.08.2020 17:27:40
onur
Schleife unterbrechen ? Aber wozu ? Mir ist noch kein Fall untergekommen, wo das nötig gewesen wäre.
AW: For Schleife unterbrechen und fortsetzen
19.08.2020 17:31:44
Manuel
Hallo onur,
Automatische Speicherung von mehreren Protokollen. Nur leider trotz if Bedingung fährt mir excel mit der Schleife durch. Nur durch Exit For wird die Schleife beendet aber wie kann diese dann wieder fortsetzten ?
Anzeige
AW: For Schleife unterbrechen und fortsetzen
19.08.2020 17:39:18
onur
Das ist keine plausible Begründung.
WARUM müssen denn mitten in der Schleife die Protokolle gespeichert werden? Automatisch? Was heisst das denn? Was steht den in deiner If-Bedingung drin?
AW: For Schleife unterbrechen und fortsetzen
19.08.2020 19:56:20
onur
Wenn du nicht meine Fragen beantworten willst, bin ich dann raus.
AW: For Schleife unterbrechen und fortsetzen
19.08.2020 17:51:07
Daniel
Hi
Verwende eine modale Userform (ShowModal = False, standardeinstellung).
Wenn du so eine Userform startet, wartet der Code bis die Userform wieder geschlossen wird.
Gruß Daniel
Anzeige
AW: For Schleife unterbrechen und fortsetzen
19.08.2020 18:18:00
Manuel
Bei showmodal verwende ich vbmodeless
AW: For Schleife unterbrechen und fortsetzen
19.08.2020 18:25:52
Daniel
Sorry meinte ShowModal = True.
AW: For Schleife unterbrechen und fortsetzen
19.08.2020 19:16:52
Manuel
Hallo Daniel,
Das Protokoll ist etwas komplex. Leider kann ich es nicht auf gebunden stellen, da der „Ladebildschirm“ mit einer Progressbar ungebunden ist - welcher über die Userform wo die Eingaben erfolgen, aufgerufen wird.
BG
Manuel
Anzeige
AW: For Schleife unterbrechen und fortsetzen
19.08.2020 19:44:24
Daniel
dann musst du die Schleife abbrechen dir den Schleifenzähler merken und das Makro mit der Schleife nach Eingabe in die Userform erneut starten, jetzt mit dem gemerkten Zählerstand als Startwert der Schleife.
oder für die Eingabe während der Schleife eine eigene Userform erstellen, welche du während der Schleife modal aufrufen kannst.
Gruß Daniel
Anzeige
Da könnte eventuell...
20.08.2020 14:17:28
Case
Hallo, :-)
die "Static-Anweisung" helfen. Denn diese Variable behält ihren Wert auch, wenn das Modul beendet wurde: ;-)
Static...
Option Explicit
Public Sub Main_1()
Static lngVar As Long
Dim lngTMP As Long
For lngTMP = 1 To 20
lngVar = lngVar + 1
Debug.Print "Variable 1 = " & lngVar & " Schleifenvariable = " & lngTMP
If lngTMP Mod 4 = 0 Then Exit For
Next lngTMP
End Sub
Public Sub Main_2()
Static lngVar As Long
Static lngTMP As Long
For lngTMP = lngTMP + 1 To 20
lngVar = lngVar + 1
Debug.Print "Variable 1 = " & lngVar & " Schleifenvariable = " & lngTMP
If lngTMP Mod 4 = 0 Then Exit For
Next lngTMP
End Sub
Servus
Case

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

For Schleife in VBA unterbrechen und fortsetzen


Schritt-für-Schritt-Anleitung

Um eine For Schleife in VBA zu unterbrechen und wieder fortzusetzen, kannst Du folgende Schritte befolgen:

  1. Erstelle eine modale Userform: Stelle sicher, dass die Userform modal ist, damit der Code wartet, bis die Eingaben bestätigt werden. Setze dafür ShowModal = True.

  2. Schleife unterbrechen: Nutze die Exit For Anweisung, um die Schleife abzubrechen, wenn eine bestimmte Bedingung erfüllt ist.

  3. Schleifenzähler speichern: Merke Dir den aktuellen Wert des Schleifenzählers, bevor Du die Schleife verlässt.

  4. Makro neu starten: Starte das Makro erneut mit dem gespeicherten Zählerstand. Setze den Startwert der Schleife auf den gespeicherten Wert.

Hier ist ein Beispielcode:

Dim counter As Long

Sub StartLoop()
    Dim i As Long
    For i = counter To 20
        ' Deine Bedingungen hier
        If ConditionMet Then
            counter = i ' Aktuellen Zähler speichern
            Exit For
        End If
    Next i
    ' Userform anzeigen
    UserForm.Show
    ' Makro erneut starten
    StartLoop
End Sub

Häufige Fehler und Lösungen

  • Endlosschleife: Achte darauf, dass die Bedingungen zum Abbrechen korrekt gesetzt sind, um eine endless loop zu vermeiden. Nutze DoEvents in der Schleife, um Excel die Möglichkeit zu geben, zu reagieren.

  • Schleife wird nicht unterbrochen: Überprüfe, ob die If-Bedingung korrekt formuliert ist. Ein häufiger Fehler ist, dass die Bedingung nie wahr wird.

  • Userform wird nicht angezeigt: Stelle sicher, dass Du die Userform nach der Schleife korrekt aufrufst und dass sie modal ist.


Alternative Methoden

Es gibt auch andere Ansätze, um eine VBA Schleife abzubrechen:

  1. Static-Anweisung: Verwende die Static-Variable, um den Zustand zwischen den Aufrufen der Schleife zu speichern.

  2. Do While Schleife: Anstatt einer For Schleife kannst Du auch eine Do While Schleife verwenden, die durch eine Bedingung gesteuert wird. Dies ermöglicht mehr Flexibilität beim Abbrechen.

Hier ist ein Beispiel für eine Do While Schleife:

Dim i As Long
i = 1
Do While i <= 20
    If ConditionMet Then
        ' Schleife unterbrechen
        Exit Do
    End If
    i = i + 1
Loop

Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du eine Excel VBA Schleife abbrechen und fortsetzen kannst:

  • Beispiel 1: Automatisches Speichern von Protokollen.
Sub SaveLogs()
    For i = 1 To 100
        If i Mod 10 = 0 Then
            ' Protokoll speichern
            SaveLog(i)
            If UserConfirms Then Exit For
        End If
    Next i
End Sub
  • Beispiel 2: Fortschrittsbalken aktualisieren.
Sub ProgressBarExample()
    Dim i As Long
    For i = 1 To 100
        UpdateProgressBar(i)
        If UserInterventionRequired Then
            counter = i
            Exit For
        End If
    Next i
    UserForm.Show
    ProgressBarExample
End Sub

Tipps für Profis

  • Debugging: Nutze Debug.Print um den Schleifenzähler und andere Variablen während der Ausführung zu überwachen.

  • Leistungsoptimierung: Verwende Application.ScreenUpdating = False, um Flickering zu vermeiden, wenn Du die Userform anzeigst.

  • Code strukturieren: Halte Deinen Code modular, indem Du Funktionen für wiederkehrende Aufgaben erstellst.


FAQ: Häufige Fragen

1. Wie verlasse ich eine For Schleife vorzeitig? Um eine For Schleife vorzeitig zu beenden, verwende Exit For innerhalb der Schleife, wenn eine bestimmte Bedingung erfüllt ist.

2. Kann ich eine Schleife mit einer Bedingung anhalten und später fortsetzen? Ja, indem Du den aktuellen Schleifenzähler speicherst und das Makro anschließend mit diesem Zähler neu startest.

3. Was ist der Unterschied zwischen Exit For und Exit Sub? Exit For verlässt nur die Schleife, während Exit Sub das gesamte Sub beendet.

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