Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1924to1928
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Next ohne For

Next ohne For
22.03.2023 09:26:49
Christian

Hallo,

ich bekomme beim Kompilieren die Fehlermeldung, dass ich Next ohne For verwendet habe.

For Blattindex2 = 2 To Sheets.Count
    If Not Worksheets(Blattindex).Cells(8, 2).Value = "blablabla" And Worksheets(Blattindex).Cells(25, 2).Value = "bliblablubb" Then
        Next Blattindex2
    End If


Was mach ich falsch? Ich hab bisschen das Gefühl, dass bei VBA die "schachtelung" etwas komisch ist bzw. nicht so wie ich es erwarten würde.

Vielen Dank für eure Hilfe.

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Next ohne For
22.03.2023 09:29:25
Fennek
Hallo,

die Verschachtelung von "For ... next" und "If ... endif" is falsch.

mfg


AW: Next ohne For
22.03.2023 09:39:30
Christian
ok vielen Dank und wie ist sie richtig?


AW: Next ohne For
22.03.2023 09:43:03
Matthias
Hallo,

Ich hab bisschen das Gefühl, dass Dein VBA - Code etwas komisch ist ;-)
Dein Code ist Total sinnfrei!
Erklär doch bitte mal was Du damit bezweckst, außer eine Variable hochzuzählen.
Das die Verschachtelung falsch ist hat Fennek bereits erwähnt.

MfG Matthias


AW: Next ohne For
22.03.2023 10:31:00
Christian
Hallo, ich habe natürlich ne Menge weggelassen, da es nach meinem Gefühl nicht relevant war.

Der Code soll folgendes machen:

For Blattindex = 2 To Sheets.Count ' Die Variable "Blattindex" hochzählen, von zwei anfangen, bis zur Anzahl der Blätter.
If Not Worksheets(Blattindex).Cells(8, 2).Value = "xxx" And Worksheets(Blattindex).Cells(25, 2).Value = "yyy" Then' Wenn in den Zellen nicht der richtige text ist...
Next Blattindex 'mit dem nächsten Blatt weitermachen
danach kommt noch eine Ganze Menge Code, was mit dem Blatt gemacht werden soll.
ganz am ende wieder next Blattindex


Anzeige
AW: Next ohne For
22.03.2023 11:02:16
Piet
Hallo

ich bin etwas faul, verwende lieber kurze Variable wie i, j zum zählen. Not kann man durch > ersetzen
Nach der İf Then Auswertung steht dein code, mit dem du ja arbeiten willst. So sollte es klappen.

  • Sub test()
    Dim i As Integer
    For i = 2 To Sheets.Count
        If Worksheets(i).Cells(8, 2) > "blablabla" And Worksheets(i).Cells(25, 2) = "bliblablubb" Then
        
        'Hier steht jetzt der Code mit dem du arbeiten willst!
        
        End If
    Next i
    End Sub

  • mfg Piet


    AW: Next ohne For
    22.03.2023 09:58:30
    onur
    Egal wie sinn- oder hirnfrei der Code ist - ich erkläre es mal:
    Stell dir mal vor, Eine For-Next-"Schleife" wären normale klammern und eine If-Then Schleife eckige Klammern.
    Du darfst, wenn du mit "Klammer auf" und dann "eckige Klammer auf" anfängst, nicht einfach mit "Klammer zu" weitermachen, bevor du die eckige Klammer geschlossen hast.Was DU machst, sieht wie folgt aus:
    (3* [4-) 1]
    Blödsinn - oder??


    Anzeige
    AW: Next ohne For
    22.03.2023 10:42:44
    onur
    SO geht das:
    For Blattindex = 2 To Sheets.Count ' Die Variable "Blattindex" hochzählen, von zwei anfangen, bis zur Anzahl der Blätter.
       If Not Worksheets(Blattindex).Cells(8, 2).Value = "xxx" And Worksheets(Blattindex).Cells(25, 2).Value = "yyy" Then
           'MACH WAS
       END IF
    Next Blattindex 'mit dem nächsten Blatt weitermachen


    AW: Next ohne For
    22.03.2023 10:00:46
    Der Steuerfuzzi
    Hallo,

    Du kannst doch nicht das hochzählen der Schleife per Bedingung durchführen. Wenn die Bedingung nicht erfüllt ist, wird nicht hochgezählt, wenn nicht hochgezählt wird, kann die Schleife nicht beendet werden.

    Also das Next darf nicht innerhalb des If-Befehls, also zwischen "if" und "end if" stehen. Das kann nicht funktionieren.

    Wenn Du die Schleife abbrechen willst, wenn eine bestimmte Bedingung eintritt, dann kannst Du das mit "Exit For" machen.

    Gruß
    Michael


    Anzeige
    AW: Next ohne For
    22.03.2023 10:35:48
    Christian
    Hallo,

    ich versuche es nochmal zu erklären.

    ' Durchlaufe jedes Blatt, angefangen beim 2.
        ' WENN irgendwas ist
             ' mache mit dem nächsten Tabellenblatt weiter
        ' Ende WENN
        'Mache etwas mit dem Tabellenblatt
        '....
        '....
    ' Mache mit dem nächsten Tabellenblatt weiter


    AW: Next ohne For
    22.03.2023 10:58:58
    Daniel
    Hi
    du "schachtelst" hier nicht, sonder du "verschränkst"

    um mal den Unterschied deutlich zu machen:

    Schachteln ist das:

    +----------
    | +-----
    | | 
    | +-----
    +----------
    verschränken ist das
    +------
    |  ------+
    +------  |
       ------+
    oder anders gesagt:
    es gilt das Prinzip: First In - Last Out
    was du als erstes eröffnest, muss als letztes geschlossen werden.
    dh wenn du beim Öffnen zuerst das FOR hast und danach das IF, dann muss beim Schließen zuerst das END IF kommen und am Schuss das NEXT
    und genau gegen dieses Prinzip verstößt du.

    Ineinander geschachtelt werden müssen immer
    - alle Schleifen (For-Next, Do-Loop)
    - alle Bedingten Programmierungen (If Then - Select Case)
    - WITH-Klammern

    keines dieser Konstrukte darf mit einem anderen Konstrukt "verschränkt" werden, es muss immer "geschachtelt" werden.

    Gruß Daniel


    Anzeige
    AW: Next ohne For
    22.03.2023 14:26:10
    Ben
    Moin,

    die Erklärungen der anderen sollten dir ja inzwischen deutlich gemacht haben, warum dein Code so nicht funktioniert.

    Es gibt für dafür aber trotzdem eine sehr simple Lösung, nämlich die GoTo-Verweise (habe ich so auch schon benutzt).
    Du ersetzt dein "Next Blattindex" innerhalb des If-Blocks einfach durch einen Verweis zum Ende der Schleife. Grob sollte das so aussehen:

    For Blattindex = 2 To Sheets.Count
        If Not Worksheets(Blattindex).Cells(8, 2).Value = "blablabla" And Worksheets(Blattindex).Cells(25, 2).Value = "bliblablubb" Then
            GoTo NächstesBlatt
        End If
        'hier können noch -zig andere Dinge stehen
    NächstesBlatt:
    Next Blattindex
    Dieser Verweis katapultiert dich heraus aus der Abfrage, vorbei an allem anderen was danach kommt und direkt zum Hochzählen des Blattindex.
    Natürlich musst du trotzdem darauf achten, dass du alle Verschachtelungen ordnungsgemäß öffnest und schließt. Hoffe das hilft!

    LG Ben


    Anzeige
    AW: Next ohne For
    22.03.2023 19:14:14
    Daniel
    naja so bringt das nicht viel.

    das macht man dann doch besser mit
    
    For Blattindex = 2 To Sheets.Count
        If Not Worksheets(Blattindex).Cells(8, 2).Value = "blablabla" And Worksheets(Blattindex).Cells(25, 2).Value = "bliblablubb" Then
        else
            'hier können noch -zig andere Dinge stehen
        End If
    Next Blattindex
    Gotos sind unübersichtlich und Fehleranfällig.
    um Vorzeitig aus einer Schleife auszusteigen, gibst EXIT FOR, das springt dann zum ersten Befehl nach dem entsprechenden Next.

    Gruß Daniel


    Anzeige
    AW: Next ohne For
    22.03.2023 20:52:27
    Yal
    Hallo Christian,

    das Vorteil von Binär ist, dass das Gegenteil vom Gegenteil das gleiche ist :-)

    Anstatt zu springen, wenn Bedingung 1 erfüllt ist:
    ' FÜR jedes Blatt ab der 2.
        ' WENN Bedingung 1 erfüllt ist
             ' mache mit dem nächsten Tabellenblatt weiter
        ' Ende WENN
        'Mache etwas mit dem Tabellenblatt
        '....
        '....
    ' nächstes Blatt 
    bleibe lieber dabei, wenn nicht erfüllt ist (ansonsten geht es ohne Behnadlung auf die nächste):
    
    ' FÜR jedes Blatt ab der 2.
        ' WENN Bedingung 1 NICHT erfüllt ist
            'Mache etwas mit dem Tabellenblatt
            '....
            '....
        ' Ende WENN
    ' nächstes Blatt 
    VG
    Yal


    Anzeige
    AW: Next ohne For
    22.03.2023 21:05:21
    Yal
    Sieht dann so aus:
    For Blattindex = 2 To Sheets.Count
        With Worksheets(Blattindex)
            If .Cells(8, 2).Value = "blablabla" Or .Cells(25, 2).Value > "bliblablubb" Then
                'hier passier jetzt alles
            End If
        End With
    Next Blattindex
    
    weil
    Not (A And B) = Not A Or Not B

    Dass es dabei einen Blattindex und einen Blattindex2 gibt, ist dir wohl bewusst, oder? Lieber kurzere Variablenamen, die sich auch noch visuell unterschieden.

    VG
    Yal

    158 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige