【发布时间】:2010-11-19 07:22:28
【问题描述】:
在 VBS/VBA 中有退出/破坏while 的方法吗?
以下代码无法按预期工作:
num = 0
while (num < 10)
if (status = "Fail") then
exit while
end if
num = num+1
wend
【问题讨论】:
在 VBS/VBA 中有退出/破坏while 的方法吗?
以下代码无法按预期工作:
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循环改为do while循环怎么样
然后使用退出
Exit Do
【讨论】:
While 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:
如果状态已经是“失败”,这将永远不会运行...
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 内部被修改(假设您在 while 之外不需要 i,这实际上并没有什么区别,但只是想呈现多个选项......
【讨论】:
bShouldStop 设置为True 之后,它跳转到End If,然后返回评估条件并最终转到@ 987654331@,而Exit Loop 将直接转到底部的Loop。当然,我会给你那个。但是现在让我问你这个问题:这是一个 脚本 还是一个每次跳转都很重要的汇编应用程序?最终结果完全相同相同,没有变量被更改,没有不应该执行的代码被执行,当 Status = Fail 时它停止。但是,请使用 while/wend 想出一个更好的解决方案...
使用 Do...Loop 和 until 关键字
num=0
Do Until //certain_condition_to_break_loop
num=num+1
Loop
这个循环会继续执行,直到条件变为真
虽然...Wend 是旧语法并且不提供中断循环的功能!更喜欢做while循环
【讨论】:
我知道这已经很老了,但它在谷歌中的排名很高。
解决方案 maddy 实现的问题(响应 rahul)以维持使用 While...Wend 循环有一些缺点
在给出的例子中
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 语法。我建议改用它。
【讨论】: