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
信じられないほど古い質問ですが、OPがDo While
を使用したくないと言っており、他のソリューションは実際には機能しないことを念頭に置いて... exactly 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
が必要でないと仮定すると、実際には違いはありませんが、単に複数のオプションを提示...
ループは廃止された構造ですが、「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}
UntilキーワードでDo ... Loopを使用する
num=0
Do Until //certain_condition_to_break_loop
num=num+1
Loop
このループは実行を継続しますntil条件が真になります
While ... Wendは古い構文であり、ループを解除する機能を提供しません! do whileループを優先する
私はこれが汚れとして古いことを知っていますが、グーグルでかなり高いランクにランクされました。
While ... Wendループの使用を維持するために実装されたソリューション(マディがrahulに応答して)の問題には、いくつかの欠点があります
与えられた例では
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
を使用してループの実行を停止できます。代わりに使用することをお勧めします。