Есть ли способ выхода/взлома while
в VBS/VBA?
Следующий код не будет работать так, как предполагалось:
num = 0
while (num < 10)
if (status = "Fail") then
exit while
end if
num = num+1
wend
Есть ли способ выхода/взлома while
в VBS/VBA?
Следующий код не будет работать так, как предполагалось:
num = 0
while (num < 10)
if (status = "Fail") then
exit while
end if
num = num+1
wend
Циклы VBScript While
не поддерживают ранний выход. Для этого используйте цикл Do
:
num = 0
do while (num < 10)
if (status = "Fail") then exit do
num = num + 1
loop
как изменить цикл while на цикл while while
и выйдите с помощью
Exit Do
Хотя 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}
Невероятно старый вопрос, но имея в виду, что 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
за пределами времени, это не имеет никакого значения, но просто хочет представить несколько параметров...
Я знаю, что это старый, как грязь, но он занимает довольно высокое место в 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
. Я бы рекомендовал использовать это вместо этого.
Использовать Do... Loop с ключевым словом Until
num=0
Do Until //certain_condition_to_break_loop
num=num+1
Loop
Этот цикл будет продолжать выполняться, До условие становится истинным
Пока... Wend - это старый синтаксис и не предоставляет функции для прерывания цикла! Предпочитайте, чтобы в цикле