Existe-t-il une méthode pour quitter/casser un while
dans VBS/VBA?
Le code suivant ne fonctionnera pas comme prévu:
num = 0
while (num < 10)
if (status = "Fail") then
exit while
end if
num = num+1
wend
Les boucles While
de VBScript ne prennent pas en charge la sortie anticipée. Utilisez la boucle Do
pour cela:
num = 0
do while (num < 10)
if (status = "Fail") then exit do
num = num + 1
loop
qu'en est-il de changer la boucle while en une boucle do while
et quitter en utilisant
Exit Do
Incroyablement vieille question, mais en gardant à l'esprit que le PO a dit qu'il ne voulait pas utiliser Do While
et qu'aucune des autres solutions ne fonctionne vraiment ... Voici quelque chose qui fait exactement la même chose qu'un Exit Loop
:
Cela n'exécute jamais rien si l'état est déjà sur "Echec" ...
While (i < 20 And Not bShouldStop)
If (Status = "Fail") Then
bShouldStop = True
Else
i = i + 1
'
' Do Something
'
End If
Wend
Alors que celle-ci traite toujours quelque chose en premier (et incrémente la variable de boucle) avant de décider si elle doit recommencer ou non.
While (i < 20 And Not bShouldStop)
i = i + 1
'
' Do Something
'
If (Status = "Fail") Then
bShouldStop = True
End If
Wend
En fin de compte, si la variable Status
est en cours de modification à l'intérieur du While
(et en supposant que vous n'avez pas besoin de i
en dehors du temps, cela ne fait vraiment aucune différence, mais je voulais juste présenter plusieurs options ...
Bien que Loop soit une structure obsolète, je vous recommande de remplacer "Boucle While" par "Do While..loop", et vous pourrez utiliser la clause 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}
Utilisez le mot-clé Do ... Loop with Until
num=0
Do Until //certain_condition_to_break_loop
num=num+1
Loop
Cette boucle continuera de s'exécuter, Jusqu'à la condition devient vraie
Alors que ... Wend est l'ancienne syntaxe et ne fournit pas de fonctionnalité pour rompre la boucle! Je préfère faire des boucles
Je sais que c'est vieux comme de la terre, mais il s'est classé assez haut dans Google.
Le problème avec la solution maddy implémentée (en réponse à rahul) pour maintenir l'utilisation d'une boucle While ... Wend a quelques inconvénients
Dans l'exemple donné
num = 0
While num < 10
If status = "Fail" Then
num = 10
End If
num = num + 1
Wend
Après que status = "Fail" num sera égal à 11. La boucle ne s'est pas terminée à la condition d'échec, elle se termine au prochain test. Tout le code après le contrôle est toujours traité et votre compteur n'est pas ce que vous attendiez.
Maintenant, selon ce que vous faites tous dans votre boucle, cela peut ne pas avoir d'importance, mais encore une fois, si votre code ressemblait à quelque chose de plus:
num = 0
While num < 10
If folder = "System32" Then
num = 10
End If
RecursiveDeleteFunction folder
num = num + 1
Wend
En utilisant Do While
ou Do Until
vous permet d'arrêter l'exécution de la boucle à l'aide de Exit Do
au lieu d'utiliser la ruse avec votre condition de boucle pour maintenir le While ... Wend
syntaxe. Je recommanderais d'utiliser cela à la place.