web-dev-qa-db-ja.com

VBS / VBAでwhileループを終了する

VBS/VBAでwhileを終了/ブレークする方法はありますか?

次のコードは意図したとおりに機能しません。

num = 0
while (num < 10)

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

    num = num+1
wend
26
maddy

VBScriptのWhileループは、早期終了をサポートしていません。そのためにDoループを使用します。

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

whileループをdo whileループに変更するのはどうですか

を使用して終了

Exit Do
7
rahul

信じられないほど古い質問ですが、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

最終的に、変数StatusWhile内で変更されている場合(そして、iが必要でないと仮定すると、実際には違いはありませんが、単に複数のオプションを提示...

1
cogumel0

ループは廃止された構造ですが、「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}
1
JunzCode

UntilキーワードでDo ... Loopを使用する

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

このループは実行を継続しますntil条件が真になります

While ... Wendは古い構文であり、ループを解除する機能を提供しません! do whileループを優先する

0
codemaster

私はこれが汚れとして古いことを知っていますが、グーグルでかなり高いランクにランクされました。

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を使用してループの実行を停止できます。代わりに使用することをお勧めします。

0
JoshHetland