2009-08-13 17 views
21

Czy istnieje metoda wychodzenia/zerwania while w VBS/VBA?Zakończyć pętlę w VBS/VBA

następujący kod nie będzie działać zgodnie z przeznaczeniem:

num = 0 
while (num < 10) 

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

    num = num+1 
wend 
+4

Jakie błędy dostaniesz? –

Odpowiedz

5

co o zmianę pętli while do zrobienia pętli while

i wyjść za pomocą

Exit Do 
+0

zmiana pętli while, aby zrobić pętlę spowoduje, że mój kod będzie jeszcze bardziej złożony.Tak właśnie znalazłem obejście, w którym jeśli chcesz wyjść z pętli while za pomocą vbscripts, zawsze gdy warunek jest ustawiony ustaw pętlę while na niespełniającą warunku pętlę.Na przykład: while (num <10) if (status = "Niepowodzenie") to num = 10o prostu ustawiłeś warunek, aby podczas gdy lop nie zadziałał koniec jeśli –

52

VBScript na While pętle don” t obsługuje wczesne wyjście. Użyj Do pętlę na to:

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

wiem, że to jest stary jak brud, ale to miejsce bardzo wysoko w google.

Problem z rozwiązaniem zastosowanym Maddy (w odpowiedzi na Rahula) w celu utrzymania zastosowanie Podczas gdy ... pętli Wend ma pewne wady

W podanym przykładzie

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

Po stan = Liczba "Fail" będzie faktycznie równa 11. Pętla nie zakończyła się po wystąpieniu błędu, kończy się w następnym teście. Cały kod po sprawdzeniu jest nadal przetwarzany, a twój licznik nie jest tym, czego mógłbyś się spodziewać.

Teraz w zależności od tego, co wszyscy robią w pętli może nie ma znaczenia, ale potem znowu, jeśli kod wyglądało coś więcej takiego:

num = 0 
While num < 10 
    If folder = "System32" Then 
    num = 10 
    End If 
    RecursiveDeleteFunction folder 
    num = num + 1 
Wend 

Korzystanie Do While lub Do Until pozwala na zatrzymanie wykonywania pętli używając Exit Do zamiast używać sztuczek z warunkiem pętli do zachowania składni While ... Wend. Zamiast tego polecam go użyć.

+0

* Co * dodatkowe 3 znaki? – cogumel0

+0

Och, człowieku, to było 5 lat temu. Myślę, że ktoś musiał coś edytować. W pewnym momencie pojawił się komentarz na temat zapisywania postaci, podczas gdy myślę, że robię to, myślę, że – JoshHetland

+0

Ale mając na uwadze cel tych pytań, są one przechowywane dla potomności, łącznie z odpowiedziami, powinieneś teraz edytować swoje, aby mieć pewność, że ma to sens . – cogumel0

0

Pętla jest przestarzałą strukturą, ale zaleca się, aby zastąpić "While loop" na "Do While..loop", i będzie można użyć klauzuli 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

Pętla while nie jest uważana za "przestarzałą" - przynajmniej nie większą niż VBScript. – Conrad

0

Zastosowanie Do ... Loop z Do kluczowych

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

Pętla ta będzie w dalszym ciągu wykonywać, Do warunek staje się prawdą

... Wend Chociaż jest stary składnia i nie zapewnia funkcji do przerwania pętli! Wolę zrobić, gdy pętle

+0

Zastąp komentarz komentarzem warunku – codemaster

0

Bardzo stare pytanie, ale mając na uwadze, że PO powiedział, że nie chce korzystać Do While i że żaden z innych rozwiązań naprawdę działa ... Tutaj jest coś, co robi dokładnie taki sam jak Exit Loop:

to nigdy nie działa nic, jeśli status jest już w „Fail” ...

While (i < 20 And Not bShouldStop) 
    If (Status = "Fail") Then 
     bShouldStop = True 
    Else 
     i = i + 1 
     ' 
     ' Do Something 
     ' 
    End If 
Wend 

niniejsza zawsze przetwarza coś pierwszy (i przyrost zmiennej pętli) przed podjęciem decyzji, czy powinien on pętla raz więcej lub nie.

While (i < 20 And Not bShouldStop) 
    i = i + 1 
    ' 
    ' Do Something 
    ' 

    If (Status = "Fail") Then 
     bShouldStop = True 
    End If 
Wend 

Ostatecznie, jeśli zmienna Status jest modyfikowany wewnątrz While (i zakładając, że nie trzeba i poza czas, to naprawdę nie ma znaczenia, ale po prostu chciałem przedstawić kilka opcji ...

+0

W obu przykładach bieżąca iteracja pętli będzie kontynuowana do końca, gdy zostanie ustawiona na "Błąd". To nie działa tak samo jak instrukcja Exit, w której wykonanie pętli zatrzymuje się natychmiast, a sterowanie jest przekazywane do zewnętrznego bloku logicznego. – JoshHetland

+0

Więc mówisz, że nie są one takie same, ponieważ po 'bShouldStop' jest ustawiona na' True', to przeskakuje do 'End If', a następnie wraca, aby ocenić stan i ostatecznie przechodzi do' Wend', podczas gdy ' Exit Loop "po prostu przejdzie prosto do" Loop "na dole. Jasne, dam ci to. Ale teraz pozwól mi zapytać: czy jest to ** skrypt ** lub aplikacja montażowa, w której liczy się każdy skok? Wynik końcowy jest ** dokładnie ** taki sam, żadne zmienne się nie zmieniają, żaden kod, który nie powinien zostać wykonany, zostaje wykonany, zatrzymuje się, gdy Status = Fail. Ale proszę, wymyśl lepsze rozwiązanie za pomocą polecenia while/wend ... – cogumel0