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

Forumthread: Continue For

Continue For
12.05.2023 09:50:59
Christoph

Hallo Zusammen,

ich möchte eine For-Schleife mit der nächst höheren Laufvariablen von vorne beginnen, wenn eine bestimmte Bedingung nicht erfüllt ist. Bei mir kommt dann immer wenn ich das mit continue for machen will die fehlermeldung "Fehler beim Kompilieren, Ausdruck erwartet".

Das ist der Code:



    For k = 1 To variable
    'Anweisungen

   For j = 1 To variable 
   'Anweisungen

     For i = 7 To lastRow ' erste Zeile überspringen, Annahme, dass Überschrift in Zeile 1 ist
   
    Dim value As Variant

    If arrdictges(k).value = "Schächte" And Worksheets("Schächte").Cells(i, SSH(j)).value > "" Then ' Bedingung, dass Zelle in Spalte SSH1 nicht leer ist
    value = Worksheets("Schächte").Cells(i, ST).value
    
    ElseIf arrdictges(k) = "Haltungen" And Worksheets("Haltungen").Cells(i, HSH(j)).value > "" Then
    value = Worksheets("Haltungen").Cells(i, HT).value
    
    Else
    Continue for
    
    
    End If
   
   'Anweisungen

  Next i 
Next j 
Next k
    




So ist ca. der Aufbau. Woran kann das liegen oder wie kann ich das lösen? Ich will nur das nächste i haben und bei in der for i schleife wieder oben beginnen.

LG Christoph

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Continue For
12.05.2023 10:24:01
Christoph
Hallo Thorsten, Danke für deine Antwort!

Ich habe das bereits gelesen und sehe eigentlich keinen Fehler in meiner Logik.. Ich habe es jetzt vorerst mit GoTo gelöst bis ich vielleicht eine andere finde.

LG Christoph


AW: Continue For
12.05.2023 11:32:52
Oberschlumpf
Hi,

echt?
Ok, deine "Logik" enthält den Fehler, dass es in vbA den Befehl Continue (For/While/Loop) - nicht! - gibt.

Und GoTo ist die Alternative, von der ich schrieb, das stimmt schon, aber beachte lieber, was die Anderen geschrieben haben, denn mit GoTo wird es mit Sicherheit unübersichtlich(er) - und ja - zur Not musst du eben dein For/Next-Code noch mal neu schreiben...so is das eben manchmal.

Ciao


Anzeige
AW: Continue For
12.05.2023 10:20:31
ralf_b
vielleicht liegt es daran das es continue in VBA nicht gibt.
du könntest es mit einem goto-Befehl direkt vor das next i versuchen. Ist aber eher dann ein unleserlicher Code. Wenn du die Bedingungen umstellst, könntest du es vielleicht ohne solche Verrenkungen machen.


AW: Continue For
12.05.2023 10:26:34
Christoph
Okay, danke für deine Antwort!

Ich habe auch schon hier und da gelesen, dass es das nicht gibt, aber dachte wenn sogar die offizielle Microsoft Seite einen Artikel darüber hat muss es das doch auch geben :D

Schon möglich, dass es auch anders geht, aber der Code ist schon so komplex ich will ihn nicht noch mal komplett neu aufziehen..

LG Christoph


Anzeige
AW: Continue For
12.05.2023 13:42:34
onur
"aber dachte wenn sogar die offizielle Microsoft Seite einen Artikel darüber hat muss es das doch auch geben" ?
Microsoft hat auch offizielle Seiten für C, Java und Python. Benutzst du auch diese Befehle in VBA ?
VB und VBA ist NICHT das Selbe, deswegen auch das "A" am Ende.. :)


Anzeige
AW: Continue For
12.05.2023 10:40:48
GerdL
Hallo Chtistoph,

für das "vorzeitige" Erhöhen des Schleifenzählers i. Für den kompletten Neustart deiner innersten Schleife dagegen nimm den Befehl "Exit For".


Dim V As Variant 
Dim blnFertig As Boolean

'................

For i = 7 To lastRow
   
         'Dim value As Variant
         
         blnFertig = False
         
         ' Bedingung, dass Zelle in Spalte SSH1 nicht leer ist
         If arrdictges(k).value = "Schächte" And Worksheets("Schächte").Cells(i, SSH(j)).value > "" Then
            V = Worksheets("Schächte").Cells(i, ST).value
            blnFertig = True
         ElseIf arrdictges(k) = "Haltungen" And Worksheets("Haltungen").Cells(i, HSH(j)).value > "" Then
            V = Worksheets("Haltungen").Cells(i, HT).value
            blnFertig = True
         End If
        
        If Not blnFertig Then
        MsgBox "Mach noch was!"
        'Anweisungen
        End If
        

  Next 

'................i
Gruß Gerd


Anzeige
AW: Continue For
12.05.2023 10:54:22
Daniel
Hi

Grundsätzlich
Deklarationen gehören nicht mitten in den Code (vorallem nicht in eine Schleife), wenn dann vielleicht eine Rediminsionierung
ebenso solltst du du Variablen nicht genauso benennen wie VBA-Schlüsselwörter.
Das kann zwar funktionieren, muss aber nicht. und für den Leser ist es meistens verwirrend.
zur Lösung:
leere die Variable zu beginn (z.B. durch ein Redim) und prüfe dann, ob sie einen Wert erhalten hat, bevor du die weiteren Anweisungen durchführst, oder direkt zum Next gehts.
         For i = 7 To lastRow 
       
            ReDim value 'value leeren
    
            If arrdictges(k).value = "Schächte" And Worksheets("Schächte").Cells(i, SSH(j)).value > "" Then 
                value = Worksheets("Schächte").Cells(i, ST).value
            ElseIf arrdictges(k) = "Haltungen" And Worksheets("Haltungen").Cells(i, HSH(j)).value > "" Then
                value = Worksheets("Haltungen").Cells(i, HT).value
            Else
            End If
       
           if Vartype(value) > 0 then ' prüfen, ob Value einen Wert erhalten hat
               'Anweisungen
           end if
      Next i 
Gruß Daniel

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Die Verwendung von Continue For in VBA


Schritt-für-Schritt-Anleitung

Um eine For-Schleife in VBA korrekt zu implementieren, ohne den Befehl Continue For verwenden zu können, folge diesen Schritten:

  1. Schleifenstruktur erstellen: Beginne mit der Definition deiner Schleifenstruktur. In diesem Beispiel verwenden wir mehrere Schleifen.

    For k = 1 To variable
        For j = 1 To variable
            For i = 7 To lastRow
                ' Anweisungen
            Next i 
        Next j 
    Next k
  2. Bedingungen prüfen: Überprüfe innerhalb der innersten Schleife die Bedingungen, um festzustellen, ob die Schleife fortgesetzt werden soll.

  3. Alternative zu Continue For: Da Continue For in VBA nicht existiert, kannst du stattdessen eine If-Bedingung verwenden, um die Ausführung der Schleife zu steuern.

  4. Exit For nutzen: Wenn du die Schleife vorzeitig beenden möchtest, kannst du den Befehl Exit For verwenden.

  5. Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um sicherzustellen, dass der Code auch bei unerwarteten Bedingungen stabil bleibt.


Häufige Fehler und Lösungen

  • Fehler beim Kompilieren: Der häufigste Fehler beim Versuch, Continue For zu verwenden, ist der Kompilierungsfehler "Ausdruck erwartet". Dies geschieht, weil dieser Befehl in VBA nicht existiert.

  • Unleserlicher Code: Wenn du GoTo verwendest, kann das zu unübersichtlichem Code führen. Überlege, ob du deine Logik umstellen kannst, um den Code leserlicher zu halten.

  • Variablendeklaration: Achte darauf, dass Variablen nicht innerhalb von Schleifen deklariert werden. Dies kann zu Verwirrung führen.


Alternative Methoden

  1. GoTo: Verwende GoTo, um zu einer bestimmten Stelle im Code zu springen, anstatt Continue For zu verwenden:

    If Not Bedingung Then GoTo Nächster
    ' Anweisungen
    Nächster:
    Next i
  2. Exit For: Beende die aktuelle Schleife mit Exit For, wenn eine bestimmte Bedingung erfüllt ist.

    If Bedingung Then Exit For
  3. Schleifen umkehren: Überlege, ob du die Logik so umkehren kannst, dass die Bedingungen am Anfang der Schleife stehen.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie du deine For-Schleife ohne Continue For implementieren kannst:

Dim V As Variant
Dim blnFertig As Boolean

For i = 7 To lastRow
    blnFertig = False

    If arrdictges(k).value = "Schächte" And Worksheets("Schächte").Cells(i, SSH(j)).value > "" Then
        V = Worksheets("Schächte").Cells(i, ST).value
        blnFertig = True
    ElseIf arrdictges(k) = "Haltungen" And Worksheets("Haltungen").Cells(i, HSH(j)).value > "" Then
        V = Worksheets("Haltungen").Cells(i, HT).value
        blnFertig = True
    End If

    If Not blnFertig Then
        MsgBox "Mach noch was!"
    End If
Next i

Tipps für Profis

  • Nutze Option Explicit am Anfang deines Moduls, um Fehler durch nicht deklarierte Variablen zu vermeiden.
  • Halte deinen Code modular, indem du Funktionen und Subroutinen verwendest, um komplexe Logik zu kapseln.
  • Verwende Debug.Print, um Werte während der Ausführung zu verfolgen und Fehler schneller zu finden.

FAQ: Häufige Fragen

1. Kann ich Continue For in VBA verwenden?
Nein, Continue For ist kein gültiger Befehl in VBA. Stattdessen solltest du alternative Methoden wie Exit For oder GoTo verwenden.

2. Was ist der beste Weg, um Schleifen in VBA zu optimieren?
Vermeide unnötige Berechnungen innerhalb von Schleifen, halte den Code lesbar und strukturiert, und nutze bedingte Logik clever, um die Ausführung zu steuern.

3. Gibt es eine Möglichkeit, die Lesbarkeit meines VBA-Codes zu verbessern?
Ja, verwende klare und beschreibende Variablennamen, und halte den Code so modular wie möglich. Vermeide die Verwendung von GoTo, um unübersichtliche Sprünge zu verhindern.

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