web-dev-qa-db-fra.com

Quitter une boucle while en VBS / VBA

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
26
maddy

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
58
Helen

qu'en est-il de changer la boucle while en une boucle do while

et quitter en utilisant

Exit Do
7
rahul

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 ...

1
cogumel0

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}
1
JunzCode

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

0
codemaster

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.

0
JoshHetland