Microsoft® Visual Basic® Scripting Edition
回圈陈述式
 VBScript 教学 
 上一页 | 下一页 


使用回圈重复执行程式码
回圈可以让您重复的执行一群陈述式。有一些回圈是在条件变成 False 之前,会一直重复执行陈述式;另一些则可能是在条件变成 True 时才停止回圈。此外,还有一些回圈是重复了某个固定次数之後就会停止。

VBScript 中可以使用下列的回圈陈述式:

使用 Do 回圈
您可以使用 Do...Loop 陈述式来重复执行一群陈述式数次。直到条件是 True 时,或条件变成 True 为止,回圈会不断的重复。
当条件是 True 时重复陈述式
Do...Loop 陈述式中,需用 While 关键字来检查条件。您可以在进入回圈之前就先检查(就像以下的 ChkFirstWhile 例子),或在回圈至少执行过一次之後再检查(像是 ChkLastWhile 的例子)。在 ChkFirstWhile 程序中,如果 myNum 不是设成 20,而是设成 9,那麽在回圈中的陈述式就永远不会被执行。在 ChkLastWhile 程序中,回圈里的陈述式只会被执行一次。因为它的条件已经是 False 了。
 Sub ChkFirstWhile()
     Dim counter, myNum
     counter = 0
     myNum = 20
     Do While myNum > 10
         myNum = myNum - 1
         counter = counter + 1
     Loop
     MsgBox "The loop made " & counter & " repetitions."
 End Sub

 Sub ChkLastWhile()
     Dim counter, myNum
     counter = 0
     myNum = 9
     Do
         myNum = myNum - 1
         counter = counter + 1
     Loop While myNum > 10
     MsgBox "The loop made " & counter & " repetitions."
 End Sub
重复执行陈述式,直到条件变成 True 为止
Do...Loop 陈述式中,您有两种方法来使用 Until 关键字检查条件。您可以在进入回圈前先检查条件(像是以下的 ChkFirstUntil 例子),或在回圈至少执行过一次後再检查(像是 ChkLastUntil 的例子)。只要在条件是 False 时,回圈就会执行。
 Sub ChkFirstUntil()
     Dim counter, myNum
     counter = 0
     myNum = 20
     Do Until myNum = 10
         myNum = myNum - 1
         counter = counter + 1
     Loop
     MsgBox "The loop made " & counter & " repetitons."
 End Sub

 Sub ChkLastUntil()
     Dim counter, myNum
     counter = 0
     myNum = 1
     Do
         myNum = myNum + 1
         counter = counter + 1
     Loop Until myNum = 10
     MsgBox "The loop made " & counter & " repetitions."
 End Sub
在回圈中跳离 Do...Loop 陈述式
您可以在 Do...Loop 中使用 Exit Do 陈述式来跳离回圈。因为通常您只会希望在某些特定的情形发生时,才要跳离回圈,比如像要避免无穷回圈时,您应该把 Exit Do 陈述式放在 If...Then...Else 陈述式的 True 区块中。当条件是 False 时,回圈就会照常执行。

在下面的例子中,myNum 将会被指定成一个会造成无穷回圈的值。其中的 If...Then...Else 陈述式将会检查这个条件,以避免无穷回圈的发生。

 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 "The loop made " & counter & " repetitions."
 End Sub
使用 While...Wend
在 VBScript 中有提供 While...Wend 陈述式,这是为了用惯了 While...Wend 陈述式的使用者所提供的。不过,因为使用 While...Wend 较缺乏弹性,所以我们还是建议您使用 Do...Loop 来取代。
使用 For...Next
您可以使用 For...Next 陈述式使一整区块的陈述式重复执行某个固定的次数。在 For 回圈中,有一个用来当作计数器的变数。每执行一次回圈时,这个变数的值就会递增或是递减。

举例来说,下面的程序将会呼叫 MyProc 程序 50 次。这个 For 陈述式指定了一个计数器变数 x,还有其起始值和结束值。Next 陈述式会使计数器的值递增 1。

 Sub DoMyProc50Times()
     Dim x
     For x = 1 To 50
         MyProc
     Next
 End Sub
使用 Step 关键字,您就可以随您的需要来递增或递减计数器变数。在下面的例子中,计数器变数 j 会在每次回圈执行後递增 2。当回圈执行完时,变数 total 将是 2、4、6、8 和 10 的总合。
 Sub TwosTotal()
     Dim j, total
     For j = 2 To 10 Step 2
         total = total + j
     Next
     MsgBox "The total is " & total
 End Sub
如果您要使计数器变数递减,您可以使用负的 Step 值。此时,结束值必须小於起始值。在下面例子中,计数器变数 myNum 会在每次回圈执行过後递减 2。当这个回圈结束时,变数 total 的值将会是 16、14、12、10、8、6、4 和 2 的总合。

 Sub NewTotal()
     Dim myNum, total
     For myNum = 16 To 2 Step -2
         total = total + myNum
     Next
     MsgBox "The total is " & total
 End Sub
您可以使用 Exit For 陈述式在计数器到达其结束值之前跳离 For...Next 陈述式。因为通常您只会希望在某些特定的情形发生时,才要跳离回圈,比如像发生错误时。所以您应该把 Exit Do 陈述式放在 If...Then...Else 陈述式的 True 区块中。当条件是 False 时,回圈就会照常执行。

使用 For Each...Next
For Each...NextFor...Next 回圈非常相似。它们的不同之处在於,For Each...Next 回圈是针对集合物件中的每一个物件或阵列中的每一个元素重复执行一次回圈,而後者是依指定的数字重复执行回圈的次数。当您不知道集合物件中有几个元素时,For Each...Next 回圈会特别的有用。

在下面的 HTML 程式码范例中,Dictionary 物件的功用是要将文字放到数个文字方块中:

 <HTML>
 <HEAD><TITLE>Forms and Elements</TITLE></HEAD>
 <SCRIPT LANGUAGE="VBScript">
 <!--
 Sub cmdChange_OnClick
    Dim d                   'Create a variable 
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "0", "Athens"     'Add some keys and items
    d.Add "1", "Belgrade"
    d.Add "2", "Cairo"

    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="Click Here"><p>
 </FORM>
 </CENTER>
 </BODY>
 </HTML>

[an error occurred while processing this directive]