|
Microsoft® Visual Basic® Scripting Edition Schleifendurchlauf durch Code |
VBScript-Tutorium Zurück |Weiter |
Das Durchlaufen von Schleifen ermöglicht Ihnen, eine Anweisungsgruppe wiederholt auszuführen. Einige Schleifen wiederholen Anweisungen, bis eine Bedingung falsch (False) wird, andere wiederholen Anweisungen, bis eine Bedingung wahr (True) wird. Es gibt auch Schleifen, die Anweisungen in einer bestimmten Anzahl wiederholen.Die folgenden Schleifenanweisungen sind in VBScript verfügbar:
- Do...Loop: Schleife durchlaufen, solange oder bis eine Bedingung True ist.
- While...Wend: Schleife durchlaufen, solange eine Bedingung True ist.
- For...Next: Verwendet einen Zähler, der angibt, wie oft Anweisungen ausgeführt werden.
- For Each...Next: Wiederholt eine Anweisungsgruppe für jedes Element in einer Auflistung oder jedes Element in einem Datenfeld.
Sie können Do...Loop-Anweisungen verwenden, um einen Anweisungblock mehrmals auszuführen, ohne daß die Anzahl der Durchläufe festgelegt ist. Die Anweisungen werden entweder wiederholt, solange eine Bedingung True ist oder bis eine Bedingung True wird.Wiederholung von Anweisungen, während eine Bedingung True ist
Verwenden Sie das Schlüsselwort While, um eine Bedingung in einer Do...Loop-Anweisung zu überprüfen. Sie können die Bedingung überprüfen, bevor die Schleife ausgeführt wird (wie im folgenden Beispiel ChkFirstWhile gezeigt), oder Sie können sie überprüfen, nachdem die Schleife mindestens einmal ausgeführt wurde (wie im Beispiel ChkLastWhile gezeigt). Wenn in der ChkFirstWhile-Prozedur myNum auf 9 anstatt auf 20 festgelegt wird, werden die Anweisungen in der Schleife niemals ausgeführt. In der ChkLastWhile-Prozedur werden die Anweisungen in der Schleife nur einmal ausgeführt, weil die Bedingung bereits False ist.Sub ChkFirstWhile() Dim counter, myNum counter = 0 myNum = 20 Do While myNum > 10 myNum = myNum - 1 counter = counter + 1 Loop MsgBox "Die Schleife wurde " & counter & " mal wiederholt." End Sub Sub ChkLastWhile() Dim counter, myNum counter = 0 myNum = 9 Do myNum = myNum - 1 counter = counter + 1 Loop While myNum > 10 MsgBox "Die Schleife wurde " & counter & " mal wiederholt." End SubWiederholen einer Anweisung, bis eine Bedingung True wird
Sie können das Schlüsselwort Until auf zwei Arten verwenden, um eine Bedingung in einer Do...Loop-Anweisung zu überprüfen. Sie können die Bedingung überprüfen, bevor die Schleife ausgeführt wird (wie im folgenden Beispiel ChkFirstUntil gezeigt), oder Sie können sie überprüfen, nachdem die Schleife mindestens einmal ausgeführt wurde (wie im Beispiel ChkLastUntil gezeigt). Solange die Bedingung False ist, wird die Schleife durchlaufen.Sub ChkFirstUntil() Dim counter, myNum counter = 0 myNum = 20 Do Until myNum = 10 myNum = myNum - 1 counter = counter + 1 Loop MsgBox "Die Schleife wurde " & counter & " mal wiederholt." End Sub Sub ChkLastUntil() Dim counter, myNum counter = 0 myNum = 1 Do myNum = myNum + 1 counter = counter + 1 Loop Until myNum = 10 MsgBox "Die Schleife wurde " & counter & " mal wiederholt." End SubBeenden einer Do...Loop-Anweisung aus der Schleife heraus
Sie können eine Do...Loop-Schleife beenden, indem Sie die Exit Do-Anweisung verwenden. Da die Schleifenausführung gewöhnlich nur in bestimmten Situationen beendet werden soll, z.B. um eine Endlosschleife zu vermeiden, sollten Sie die Exit Do-Anweisung im True-Anweisungsblock einer If...Then...Else-Anweisung verwenden. Wenn die Bedingung False ist, wird die Schleife normal ausgeführt.Im folgenden Beispiel wird myNum ein Wert zugewiesen, der eine Endlosschleife verursacht. Die If...Then...Else Anweisung überprüft, ob dieser Zustand eintritt, und verhindert die endlose Wiederholung.
Sub ExitExample() Dim counter, myNum counter = 0 myNum = 9 Do Until myNum = 10 myNum = myNum - 1 counter = counter + 1 If myNum < 10 Then Exit Do Loop MsgBox "Die Schleife wurde " & counter & " mal wiederholt." End Sub
Die While...Wend-Anweisung wird in VBScript für Entwickler zur Verfügung gestellt, die mit ihrer Verwendung vertraut sind. Aufgrund der eingeschränkten Flexibilität von While...Wend wird jedoch empfohlen, stattdessen Do...Loop zu verwenden.
Sie können For...Next-Anweisungen verwenden, um genau festzulegen, wie oft ein Anweisungblock ausgeführt werden soll. Für Schleifen verwenden Sie eine Zählervariable, deren Wert mit jeder Wiederholung der Schleife vergrößert oder verkleinert wird.Beispielsweise hat die folgende Prozedur zur Folge, daß eine Prozedur mit dem Namen MyProc 50 mal ausgeführt wird. Die For-Anweisung gibt als Zählervariable x an und legt den zugehörigen Start- und Endwert fest. Die Next-Anweisung zählt die Zählervariable jeweils um 1 hoch.
Mit dem Schlüsselwort Step können Sie die Zählervariable um den darin angegebenen Wert vergrößern oder verkleinern. Im folgenden Beispiel wird die Zählervariable j bei jedem Schleifendurchlauf um 2 hochgezählt. Wenn die Schleife beendet ist, enthält total die Summe von 2, 4, 6, 8 und 10.Sub DoMyProc50Times() Dim x For x = 1 To 50 MyProc Next End SubZum Verkleinern der Zählervariable verwenden Sie einen negativen Wert für Step. Sie müssen einen Endwert angeben, der kleiner als der Startwert ist. Im folgenden Beispiel wird die Zählervariable myNum bei jedem Schleifendurchlauf um 2 verkleinert. Wenn die Schleife beendet ist, enthält total die Summe von 16, 14, 12, 10, 8, 6, 4 und 2.Sub TwosTotal() Dim j, total For j = 2 To 10 Step 2 total = total + j Next MsgBox "Die Summe ist " & total End Sub
Sie können jede For...Next-Anweisung beenden, bevor der Zähler seinen Endwert erreicht, indem Sie die Exit For-Anweisung verwenden. Da gewöhnlich die Schleifenausführung nur in bestimmten Situationen beendet werden soll, z.B. wenn ein Fehler auftritt, sollten Sie die Exit For-Anweisung im True-Anweisungsblock einer If...Then...Else-Anweisung verwenden. Wenn die Bedingung False ist, wird die Schleife normal ausgeführt.Sub NewTotal() Dim myNum, total For myNum = 16 To 2 Step -2 total = total + myNum Next MsgBox "Die Summe ist " & total End Sub
Eine For Each...Next-Schleife ist einer For...Next -Schleife ähnlich. Anstatt die Anzahl der Schleifendurchläufe zum Wiederholen der Anweisungen anzugeben, wird in einer For Each...Next-Schleife eine Anweisungsgruppe für jedes Element in einer Auflistung von Objekten oder für jedes Element in einem Datenfeld ausgeführt. Dies ist besonders dann hilfreich, wenn nicht bekannt ist, wieviele Elemente in einer Gruppe enthalten sind.Im folgenden HTML-Codebeispiel wird der Inhalt eines Dictionary-Objekts verwendet, um Text in mehrere Textfelder einzusetzen:
<HTML> <HEAD><TITLE>Formulare und Elemente</TITLE></HEAD> <SCRIPT LANGUAGE="VBScript"> <!-- Sub cmdChange_OnClick Dim d 'Erstellen einer Variablen Set d = CreateObject("Scripting.Dictionary") d.Add "0", "Athen" 'Einige Schlüssel und Elemente hinzufügen d.Add "1", "Belgrad" d.Add "2", "Kairo" For Each I in d Document.frmForm.Elements(I).Value = D.Item(I) Next End Sub --> </SCRIPT> <BODY> <CENTER> <FORM NAME="frmForm" <Input Type = "Text"><p> <Input Type = "Text"><p> <Input Type = "Text"><p> <Input Type = "Text"><p> <Input Type = "Button" NAME="cmdChange" VALUE="Hierauf klicken"><p> </FORM> </CENTER> </BODY> </HTML>