Exit a while loop in VBS/VBA

前端 未结 6 1777
天涯浪人
天涯浪人 2020-12-11 14:25

Is there a method of exiting/breaking a while in VBS/VBA?

Following code won\'t work as intended:

num = 0
while (num < 10)

    if (s         


        
相关标签:
6条回答
  • 2020-12-11 14:58

    I know this is old as dirt but it ranked pretty high in google.

    The problem with the solution maddy implemented (in response to rahul) to maintain the use of a While...Wend loop has some drawbacks

    In the example given

    num = 0
    While num < 10
      If status = "Fail" Then
        num = 10
      End If
      num = num + 1
    Wend
    

    After status = "Fail" num will actually equal 11. The loop didn't end on the fail condition, it ends on the next test. All of the code after the check still processed and your counter is not what you might have expected it to be.

    Now depending on what you are all doing in your loop it may not matter, but then again if your code looked something more like:

    num = 0
    While num < 10
      If folder = "System32" Then
        num = 10
      End If
      RecursiveDeleteFunction folder
      num = num + 1
    Wend
    

    Using Do While or Do Until allows you to stop execution of the loop using Exit Do instead of using trickery with your loop condition to maintain the While ... Wend syntax. I would recommend using that instead.

    0 讨论(0)
  • 2020-12-11 14:59

    Use Do...Loop with Until keyword

    num=0
    Do Until //certain_condition_to_break_loop
     num=num+1
    Loop
    

    This loop will continue to execute, Until the condition becomes true

    While...Wend is the old syntax and does not provide feature to break loop! Prefer do while loops

    0 讨论(0)
  • 2020-12-11 15:04

    what about changing the while loop to a do while loop

    and exit using

    Exit Do
    
    0 讨论(0)
  • 2020-12-11 15:10

    Incredibly old question, but bearing in mind that the OP said he does not want to use Do While and that none of the other solutions really work... Here's something that does exactly the same as a Exit Loop:

    This never runs anything if the status is already at "Fail"...

    While (i < 20 And Not bShouldStop)
        If (Status = "Fail") Then
            bShouldStop = True
        Else
            i = i + 1
            '
            ' Do Something
            '
        End If  
    Wend
    

    Whereas this one always processes something first (and increment the loop variable) before deciding whether it should loop once more or not.

    While (i < 20 And Not bShouldStop)
        i = i + 1
        '
        ' Do Something
        '
    
        If (Status = "Fail") Then
            bShouldStop = True
        End If  
    Wend
    

    Ultimately, if the variable Status is being modified inside the While (and assuming you don't need i outside the while, it makes no difference really, but just wanted to present multiple options...

    0 讨论(0)
  • 2020-12-11 15:15

    VBScript's While loops don't support early exit. Use the Do loop for that:

    num = 0
    do while (num < 10)
      if (status = "Fail") then exit do
      num = num + 1
    loop
    
    0 讨论(0)
  • 2020-12-11 15:23

    While Loop is an obsolete structure, I would recommend you to replace "While loop" to "Do While..loop", and you will able to use Exit clause.

    check = 0 
    
    Do while not rs.EOF 
       if rs("reg_code") = rcode then 
          check = 1 
          Response.Write ("Found") 
          Exit do
       else 
          rs.MoveNext 
        end if 
    Loop 
    
    if check = 0 then 
       Response.Write "Not Found" 
    end if}
    
    0 讨论(0)
提交回复
热议问题