wend - Salga de un ciclo while en VBS/VBA
while visual basic ejemplos (6)
¿Qué hay de cambiar el bucle while por un bucle while?
y salir usando
Exit Do
¿Hay algún método para salir / interrumpir un while
en VBS / VBA?
El siguiente código no funcionará como se esperaba:
num = 0
while (num < 10)
if (status = "Fail") then
exit while
end if
num = num+1
wend
Los bucles While
de VBScript no son compatibles con la salida anticipada. Use el bucle Do
para eso:
num = 0
do while (num < 10)
if (status = "Fail") then exit do
num = num + 1
loop
Sé que esto es viejo como suciedad, pero se clasificó bastante alto en Google.
El problema con la solución implementada por maddy (en respuesta a rahul) para mantener el uso de un ciclo While ... Wend tiene algunos inconvenientes
En el ejemplo dado
num = 0
While num < 10
If status = "Fail" Then
num = 10
End If
num = num + 1
Wend
Después del estado = "Fail", el número realmente será igual a 11. El ciclo no finalizó en la condición de falla, sino que finaliza en la siguiente prueba. Todo el código después de la verificación aún se procesa y su contador no es lo que podría haber esperado que fuera.
Ahora, dependiendo de lo que estén haciendo todos ustedes en su ciclo, puede que no importe, pero de nuevo si su código se viera algo más parecido a:
num = 0
While num < 10
If folder = "System32" Then
num = 10
End If
RecursiveDeleteFunction folder
num = num + 1
Wend
El uso de Do While
o Do Until
permite detener la ejecución del ciclo utilizando Exit Do
lugar de usar trucos con su condición de bucle para mantener la sintaxis While ... Wend
. Yo recomendaría usar eso en su lugar.
Si bien Loop es una estructura obsoleta, le recomendaría que reemplace "While loop" por "Do While..loop", y podrá usar la cláusula 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}
Una pregunta increíblemente vieja, pero teniendo en cuenta que el OP dijo que no quiere usar Do While
y que ninguna de las otras soluciones realmente funciona ... Aquí hay algo que hace exactamente lo mismo que un Exit Loop
:
Esto nunca ejecuta nada si el estado ya está en "Fail" ...
While (i < 20 And Not bShouldStop)
If (Status = "Fail") Then
bShouldStop = True
Else
i = i + 1
''
'' Do Something
''
End If
Wend
Mientras que este siempre procesa algo primero (e incrementa la variable de bucle) antes de decidir si debe repetirse o no.
While (i < 20 And Not bShouldStop)
i = i + 1
''
'' Do Something
''
If (Status = "Fail") Then
bShouldStop = True
End If
Wend
En definitiva, si la variable Status
se está modificando dentro del While
(y asumiendo que no es necesario que esté fuera del tiempo, realmente no hace ninguna diferencia, pero solo quería presentar múltiples opciones ...
Use Do ... Loop con la palabra clave Until
num=0
Do Until //certain_condition_to_break_loop
num=num+1
Loop
Este ciclo continuará ejecutándose, Hasta que la condición se vuelva verdadera
Mientras ... Wend es la sintaxis antigua y no proporciona funciones para romper el ciclo. Prefiere hacer mientras bucles