2016-08-30 8 views
0

Ich habe eine kurze Frage zu Loops in Loops mit Do Until. Läuft die erste Schleife die zweite Schleife, wenn die Kriterien für die zweite erfüllt sind?VBScript Loop in einem Loop

Beispiel:

Dim X 
Dim Y 
X = 0 
Y = 0 
' Loop 1 
Do Until X = 20 
    ' Loop 2 
    Do Until Y = 5 
    Y = Y + 1 
    Loop 
X = X + 1 
Loop 

So, loop 1 soll Schleife 20 Mal und jedes Mal, wenn es Schleifen sollte die zweite Schleife auszuführen, die 5 * 20-mal-Schleifen. Es scheint nicht zu funktionieren. Die zweite Schleife scheint nur 1 Mal zu laufen und wird den Rest der Zeit ignoriert.

How to loop a loop in VBScript? Hat mir nicht viel geholfen.

+1

Sie vermissen die 'Y = 0', um die innere Schleife bei jeder Iteration der äußeren Schleife zurückzusetzen. – Lankymart

+0

Anscheinend [Wie Schleife eine Schleife in VBScript?] (Http://stackoverflow.com/questions/28560557/how-to-loop-a-loop-in-vbscript) hat Ihnen nicht viel geholfen? Ich kann nur annehmen, dass du es nicht gelesen oder richtig verstanden hast, dieses Beispiel ist ziemlich umfassend. Beachte den letzten Kommentar zu dieser Antwort * "Ohne' z = 0 'wird die zweite Schleife nach der ersten Runde nicht betreten. "* Das ist hier genau das Problem, außer dass deine Variable' y = 0 'und nicht' z = 0 ist 'Aber das Gleiche gilt. – Lankymart

+0

Wer schließt die Stimmen - * "unklar, was du fragst" *? Wirklich ??, scheint mir ziemlich klar zu sein! Es ist jedoch ein Duplikat schlicht und einfach. – Lankymart

Antwort

1

Da die innere Schleife zum ersten Mal ausgeführt wird, wird sie beendet, wenn Y = 5 - da Sie den Wert Y nicht erneut ändern, wird das nächste Mal nicht ausgeführt, da die Bedingung bereits erfüllt wurde.

Versuchen Sie stattdessen:

Dim X 
Dim Y 
X = 0 
Y = 0 
' Loop 1 
Do Until X = 20 
    ' Loop 2 
    Do Until Y = 5 
    Y = Y + 1 
    Loop 
    Y = 0 '// reset value of Y so that inner loop will run next time around 
X = X + 1 
Loop 

oder verwenden Sie eine For...To... Schleife statt:

Dim X,Y 

For X = 1 To 20 
'// Do something... 
    For Y = 1 To 5 
    '// Do something 5 times 
    Next 
Next 

Dies ist wegen der Y Variablen Umfang, wie Sie erklärt und zugeordnet es ist Anfangswert außerhalb der Schleifen.

Sie können mehr über den Geltungsbereich von Variablen in VBScript in this MSDN article

+0

Gute Erklärung. Es ist nur persönliche Vorliebe, aber ich initialisiere Variablen immer vor der Schleife und danach. – Lankymart

0

Y erreicht 5 das erste Mal die innere Schleife läuft, also das nächste Mal um sie herum bereits erfüllt den until y = 5 Zustand lesen, damit die Schleife nie wieder läuft.

Setzen Sie es vor der Schleife zurück oder wenn die Schleife abgeschlossen ist.

Y = 0 
Do Until Y = 5