Anzeige
Archiv - Navigation
1916to1920
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

3 For...Next-Schleifen ineinander gelegt

3 For...Next-Schleifen ineinander gelegt
05.02.2023 14:24:50
KSMBln
Hallo zusammen,
Ich stoße immer wieder an meine Gedankengrenze, wenn ich For...Next-Schleifen machen möchte. Bis jetzt konnte ich immer nur eine Schleife erstellen (diese haben funktioniert). Diesmal brauche ich aber mindestens 2 Parallel. habe schon auf diversen seiten geschaut. Auf einigen steht auch wie man sie macht :) (Versuche nicht immer gescheitert, aber Ergebis immer falsch)
Nun möchte ich aber in eine Zelle etwas bestimmes schreiben:
Es soll in einer seperaten Excel-Tabelle "Schalthilfe" in der Spalte "A" Daten eingetragen werden.
Sie sehen folgendermaßen aus:
[Zelle in Tabelle_Schalthilfe].range("A"&T).value = [Element] & "/" & [DA]. Wobei T A2-A26; Element [variabel](je nach Slot) und DA 1-15 (nur Ungerade) sein kann.
in Zelle A2 steht zum Beispiel: A2 = "40/1"; A3 = "40/5" (Togglebutton38 ist eingeschaltet=übersprungen)
Dabei muß sich das Element solange wiederholen bis 15 erreicht ist. Erst dann darf es um 1 erhöht werden.
wobei die Abfrage bei Togglebutton37 beginnt und bei Togglebutton60 endet (alle anderen werden ignoriert)
Dazu kommt noch sie Zelle aus der Tabelle "Schalthilfe" "Ax" wo immer eine leere Zelle unter der belegten 'Zelle gesucht wird (Zelle A2-ff)
Da es maximal 24 Ports sind sollte das Ende bei "A25" (Überschrift[A1]+24) liegen.
Ports die nicht belegt sind werden ausgelassen (Togglebutton.value=true)
es müssen dann drei For...Next ineinander gelegt werden:
Element; DA und Zelle (Reiehnfolge muß festgelegt werden)
Bild zur Userform:
Userbild
hierbei ist die Combobox wichtig, sie gibt "E" an.
Bisherige Formel:
Private Sub CommandButton_Fin_Click()
'Variablen erstellen
Dim Elem1 As Integer
Dim Elem2 As Integer
Dim DA1 As Integer
Dim DA2 As Integer
Dim TB1 As Integer
Dim TB2  As Integer
Dim ZeB As Integer
Dim ZeZ As Integer
Dim Z As Integer
Dim E As Integer
Dim D As Integer
Dim T As Integer
'Variable festlegen
DA1 = 1     'für Elemente-DA 1-15
DA2 = 15    'für Elemente-DA 1-15
TB1 = 37    'für ToggleButtom 1-72
TB2 = 60    'für ToggleButton 1-72
ZeB = 2     'für die Zellen in der Extradatei A2-A26
ZeZ = 26    'für die Zellen in der der Extradatei A2-A26
'neue Excel-Datei anlegen
'entnommen von https://www.automateexcel.com/de/vba/schleifen/
'entnommen aus Makro-Erstellung
'entnommen von https://learn.microsoft.com/de-de/office/vba/excel/concepts/workbooks-and-worksheets/create-a-workbook
'Set NewBook = Workbooks.Add             'aufrufen einer neuen Excel-Datei
'With NewBook
'    .Title = "Schalthilfe"              'benennen der Datei
'    .Subject = "Schaltpunkte"
'    .Sheets("Tabelle1").Select
'        Range("A1").Select
'        Selection.Font.Bold = True
'        ActiveCell.FormulaR1C1 = "XDSL-Neu"
'        Columns("A:A").Select
'        Selection.NumberFormat = "@"
'        Range("A2").Select
'    .SaveAs Filename:="Schalthilfe.xlsx" 'Speichern der Datei (in Dokumente)
'End With
Tabelle_Schalthilfe.Visible = xlSheetVisible
    Tabelle_Schalthilfe.Range("A:A").Clear
    Tabelle_Schalthilfe.Range("A1").Font.Bold = True
    Tabelle_Schalthilfe.Range("A1").FormulaR1C1 = "XDSL-Neu"
    Tabelle_Schalthilfe.Columns("A:A").NumberFormat = "@"
'Entnommen aus https://www.excel-vba-lernen.de/07-for-next
'entnommen aus https://learn.microsoft.com/de-de/dotnet/visual-basic/language-reference/statements/for-next-statement
'entnommen aus https://www.vba-tutorial.de/ablaufsteuerung/schleifen.htm
'Abfrage der Combobox
If ComboBox_Slot.Text = 201 Then
    Elem1 = 4
    Elem2 = 6
    GoTo Slot201
    Else
    If ComboBox_Slot.Text = 202 Then
        Elem1 = 13
        Elem2 = 15
        GoTo Slot202
        Else
        If ComboBox_Slot.Text = 203 Then
            Elem1 = 22
            Elem2 = 25
            GoTo Slot203
            Else
            If ComboBox_Slot.Text = 204 Then
                Elem1 = 31
                Elem2 = 33
                GoTo Slot204
                Else
                If ComboBox_Slot.Text = 207 Then
                    Elem1 = 40
                    Elem2 = 42
                    GoTo Slot207
                    Else
                    If ComboBox_Slot.Text = 208 Then
                        Elem1 = 49
                        Elem2 = 51
                        GoTo Slot208
                        Else
                    End If
                End If
            End If
        End If
    End If
End If
'Bearbeitung Slot 201
Slot201:
Slot201:
E = Label_Elem4.Caption     '"E" wird mit dem Inhalt vom Label4 belegt (gesetzt durch Combobox_Slot)
For T = TB1 To TB2      'ToggleButton
    Z = T - 35
    If Me.Controls("ToggleButton" & CStr(T)).Value = False Then
        For D = 1 To 15 Step 2       '"Senkrechte" DA 1-15
        Tabelle_Schalthilfe.Range("A" & Z).Value = E & "/" & D
            If D = 15 Then
                E = E + 1
            End If
        Next D
    End If
Next T
GoTo Ende
'Bearbeitung Slot 202
Slot202:
GoTo Ende
'Bearbeitung Slot 203
Slot203:
GoTo Ende
'Bearbeitung Slot 204
Slot204:
GoTo Ende
'Bearbeitung Slot 207
Slot207:
GoTo Ende
'Bearbeitung Slot 208
Slot208:
GoTo Ende
Ende:
Tabelle_Schalthilfe.Select
Unload Me
End Sub
Jetzt kommt dies Ergebnis raus:
XDSL-Neu
40/15
41/15
42/15
43/15
44/15
45/15
46/15
47/15
48/15
49/15
50/15
51/15
52/15
53/15
54/15
55/15
56/15
57/15
58/15
59/15
60/15
61/15
62/15
63/15
was falsch ist (es wird zumindest etwas geschrieben)
Leider klappt es nicht so wie ich denke. Kann mir jemand helfen?
Danke 
Klaus


							

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

Betreff
Datum
Anwender
Anzeige
AW: 3 For...Next-Schleifen ineinander gelegt
05.02.2023 16:40:28
Mullit
Hallo,
sollte sich da keiner reindenken wollen, nachbauen wird's best. keiner, wäre es sinnvoll die Mappe hochzuladen...viell guckt einer rein...
Gruß, Mullit
AW: 3 For...Next-Schleifen ineinander gelegt
05.02.2023 16:51:43
Mullit
aber schonmal vorab, die ganzen Gotos sehen nicht wirklich gut aus, desweitern schreibt man einen If Else zweig besser so:
If ....Then
Else
End if
Gruß, Mullit
AW: 3 For...Next-Schleifen ineinander gelegt
05.02.2023 17:22:12
Klaus
Hallo Mulit,
Die "Goto" sind schon richtig :)
Die ganze Formel habe ich reingeschrieben, damit ihr wist was ich meine.
Aber ich habe schon ein wenig weiter gearbeitet :)
Ich habe schon weiter entwickelt :)
Hier mein Ergebnis:
For A = E1 To E2
    Do While T  61
        Do While D  16        '"Senkrechte" DA 1-15
            If Me.Controls("ToggleButton" & CStr(T)).Value = False Then
                Tabelle_Schalthilfe.Range("A" & Z).Value = A & "/" & D
                Z = Z + 1
                D = D + 2
            End If
            If D = 15 Then
                Exit Do
            End If
        Loop
    If T = 32 Then
        Exit Do
    End If
    Loop
    A = E1 + 1
If A = E2 Then
    Exit For
End If
Next A
Leider scheine ich jetzt eine dauer Schleife zu produzieren :(
Vorher hatte ich einen Teilerfolg :) Aber nun habe ich wohl etwas zuviel rein gebaut ....
Klaus
Anzeige
AW: 3 For...Next-Schleifen ineinander gelegt
05.02.2023 17:48:26
onur
Wie kommst du auf "VBA gut"?
Weisst du denn nicht, wie Schleifen funktionieren? Dass z.B. A nie grösser werden kann als E+1 dank der Zeile
A = E1 + 1
Und WO glaubst du, wird T innerhalb der Schleife überhaupt verändert, so dass der Wert 61 überhaupt erreicht werden kann? Oder - warum auch immer - der Wert 32?
AW: 3 For...Next-Schleifen ineinander gelegt
05.02.2023 18:01:29
Klaus
wie ich sagte, bei Schleifen hapert es noch :(
ich weiß das A nur um maximal 2 sich erhöht Dank A=E1+1 Das ist OK so :)
T wird immer dann verändert, wenn die Schleifen im Innern erledigt sind, also D=15 ist.
Das T=32 war eine Überlegung von mir, die aber leider so nciht geht :( Hier muß T=60 sein.
Aber du hast mir einen kleinen Tip gegeben :) Da ist eine Drehung drin :(
Anzeige
AW: 3 For...Next-Schleifen ineinander gelegt
05.02.2023 18:17:33
onur
Dank A=E1+1 wird A immer wieder zurückgesetzt - Next erhöht A um 1 und A=E1+1 setzt A wieder zurück.
Angenommen E1 wäre 10:
Es fängt mit A=10 an, dann wird durch "A=E1+1" 11 draus. Nach Next zurück zu For und A=12.
Dann kommt wieder "A=E1+1" und aus der 12 wird wieder 11. usw usw
"T wird immer dann verändert, wenn die Schleifen im Innern erledigt sind" - Und zwar in WELCHER Zeile ? Oder glaubst du, dass die Laufvariable einer Do-Loop-Schleife sich automatisch erhöht, wie bei einer For-Next-Schleife?
AW: 3 For...Next-Schleifen ineinander gelegt
05.02.2023 18:29:58
Zwenn
Hallo Klaus
Die "Goto" sind schon richtig :)
Ganz sicher nicht! Zumal Du die nach dem zweiten Draufschauen, nach Erwachen aus der Ohnmacht nach dem ersten Draufschauen, vermutlich einfach ersatzlos streichen kannst. Sollte da noch mehr Code zwischen sein, den Du aber "für die Frage" als sinnlos erachtest, spielt das keine Rolle. Deine Art zu Programmieren ist falsch, wenn Du GoTo in dieser Weise verwendest. Bitte mach Dich mit den Grundlagen vertraut:
https://de.wikipedia.org/wiki/Strukturierte_Programmierung
Wie Mullit bereits geschrieben hat, lade außerdem bitte eine Beispielmappe hoch, in der die UF und der Rest enthalten ist, um das Ganze in der Praxis nachvollziehen zu können.
Viele Grüße,
Zwenn
Anzeige
AW: 3 For...Next-Schleifen ineinander gelegt
05.02.2023 18:45:13
Piet
Hallo
lege in deiner Loop Schleife für T und D vor dem starten zwei Variable "t" und "d" fest. Entweder setzt du sie auf Null, und erhöhst sie am Ende von Do Loop um 1, z.B. t=t+1 und springst beim endwert aus Do Lpop raus.
Oder du setzt den Wert auf den Endwert, und subtrahierst ihn t=t-1 und springst bei Null aus Do Loop raus.
Ich verwende beides, je nachdem was zum Programmablauf geeigneter ist!
mfg Piet

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige