Подтвердить что ты не робот

Выйти из цикла while в VBS/VBA

Есть ли способ выхода/взлома while в VBS/VBA?

Следующий код не будет работать так, как предполагалось:

num = 0
while (num < 10)

    if (status = "Fail") then
        exit while
    end if

    num = num+1
wend
4b9b3361

Ответ 1

Циклы VBScript While не поддерживают ранний выход. Для этого используйте цикл Do:

num = 0
do while (num < 10)
  if (status = "Fail") then exit do
  num = num + 1
loop

Ответ 2

как изменить цикл while на цикл while while

и выйдите с помощью

Exit Do

Ответ 3

Хотя Loop - устаревшая структура, я бы рекомендовал заменить "While loop" на "Do While..loop", и вы сможете использовать предложение Exit.

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}

Ответ 4

Невероятно старый вопрос, но имея в виду, что OP сказал, что он не хочет использовать Do While и что ни одно из других решений действительно не работает... Вот что делает точно то же самое как Exit Loop:

Это никогда не работает, если статус уже находится в "Fail"...

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

В то время как этот один сначала сначала обрабатывает что-то (и увеличивает переменную цикла), прежде чем принимать решение о необходимости повторять цикл или нет.

While (i < 20 And Not bShouldStop)
    i = i + 1
    '
    ' Do Something
    '

    If (Status = "Fail") Then
        bShouldStop = True
    End If  
Wend

В конечном счете, если переменная Status изменяется внутри While (и если вам не нужно i за пределами времени, это не имеет никакого значения, но просто хочет представить несколько параметров...

Ответ 5

Я знаю, что это старый, как грязь, но он занимает довольно высокое место в google.

Проблема с решением maddy реализована (в ответ на rahul), чтобы поддерживать использование While... Wend loop имеет некоторые недостатки

В приведенном примере

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

После того, как status = "Fail" num будет фактически равен 11. Цикл не заканчивается в состоянии сбоя, он заканчивается в следующем тесте. Весь код после проверки все еще обрабатывается, и ваш счетчик не является тем, что вы ожидали от него.

Теперь, в зависимости от того, что вы все делаете в своем цикле, это может быть неважно, но опять же, если ваш код выглядел примерно так:

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

Использование Do While или Do Until позволяет остановить выполнение цикла с помощью Exit Do вместо использования обмана с условием цикла для поддержки синтаксиса While ... Wend. Я бы рекомендовал использовать это вместо этого.

Ответ 6

Использовать Do... Loop с ключевым словом Until

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

Этот цикл будет продолжать выполняться, До условие становится истинным

Пока... Wend - это старый синтаксис и не предоставляет функции для прерывания цикла! Предпочитайте, чтобы в цикле