2009-08-13 14 views
21

VBS/VBAでwhileを終了/中断する方法はありますか?VBS/VBAでwhileループを終了

次のコードが意図したとおりに動作しません:

num = 0 
while (num < 10) 

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

    num = num+1 
wend 
+4

どのようなエラーが表示されますか? –

答えて

5

ループ

と出口が

Exit Do 
+0

whileループを行うwhileループを変更すると、コードがさらに複雑になります。vbscriptsを使用してwhileループを終了したい場合は、 whileループをループの一致しない条件に設定します。例: while(num <10) if(status = "Fail")then num = 10'hereここでは、lopが失敗したときの状態を設定します。 end –

52

VBScriptのWhileを使用しながら行うには、whileループの変更についてドンループ何早期終了をサポートします。そのためDoループを使用します

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

を私は、これは汚れのように古いです知っているが、それはグーグルでかなり上位にランクイン。

一方の使用を維持する(ラーフルに応答して)溶液マディ実装に伴う問題...とWENDループは=ステータス後

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

を与えられた例では、いくつかの欠点

を有します"Fail" numは実際には11になります。ループは失敗条件で終了せず、次のテストで終了します。チェックの後のすべてのコードはまだ処理されており、カウンターはあなたが期待していたものではありません。

Do Whileまたは Do Untilあなたがループの実行を停止することができますを使用し
num = 0 
While num < 10 
    If folder = "System32" Then 
    num = 10 
    End If 
    RecursiveDeleteFunction folder 
    num = num + 1 
Wend 

:今、あなたのコードは、より多くのようなものを見た場合、それが再び問題では、ないかもしれませんが、何を、すべてのループでやっているに応じて、

ループ条件でトリッキーを使用してWhile ... Wendの構文を維持する代わりにExit Doを使用してください。私は代わりにそれを使用することをお勧めします。

+0

*何が3文字追加されますか? – cogumel0

+0

ああ、5年前のこと。私は誰かが何かを編集したに違いないと思う。私は思っている間に文字を保存することについてのコメントがありました。 – JoshHetland

+0

しかし、これらの質問の目的を念頭に置くと、答えを含めて後世のために保管されています。 。 – cogumel0

0

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

whileループは「廃止」とはみなされません。少なくとも、VBScriptはそれ以上ではありません。 – Conrad

0

使用しています...ループキーワードまで

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

でこのループを実行していきます、まで条件が真

ながらになり... Wendのは、古い構文ですブレークループに機能を提供していません!ループ

+0

コメントを条件に置き換えてください – codemaster

0

信じられないほど古い質問しながら行うことを好むが、ここでは... OPは、彼がDo Whileおよび他のソリューションのどれも実際に動作しないことを利用したくないと述べたことを念頭にすることとまったく同じを行い何かExit Loop

ステータスが「失敗」にすでにある場合は、この1は常に最初に何かを処理(​​およびループ変数をインクリメント)に対しこれは、一度それが必要かどうかのループを決定する前に...

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を必要としないと仮定されている場合、最終的に、それは本当に違いはありませんが、ちょうど複数のオプションを提示したかった...

+0

どちらの例でも、現在のループの反復は、「失敗」に設定されている場合、最後まで続きます。これは、ループの実行が直ちに停止し、制御が外側の論理ブロックに戻されるExitステートメントと同じように機能しません。 – JoshHetland

+0

'bShouldStop'が' True'に設定された後、 'End If'にジャンプし、条件を評価するために戻り、最後に' Wend'に行きますので、 Exit Loop'は一番下の 'Loop'にまっすぐに行きます。確かに、私はあなたにそれをあげます。しかし今、私にあなたにこれを尋ねさせます:これは**スクリプト**ですか、あるいはそれぞれのジャンプが関係するアセンブリアプリケーションですか?最終結果は**まったく同じ**です。変数は変更されません。実行されるべきでないコードは実行されず、Status = Failのときに停止します。しかし、しばらくお待ちください... – cogumel0

関連する問題