romper otro inverso for ejemplos dentro bucles bucle vba conditional loops

otro - romper for vba



VBA: cómo omitir condicionalmente una iteración de bucle for (6)

Tengo un bucle for sobre una matriz. Lo que quiero hacer es probar una cierta condición en el ciclo y saltar a la siguiente iteración si es verdadero:

For i = LBound(Schedule, 1) To UBound(Schedule, 1) If (Schedule(i, 1) < ReferenceDate) Then PrevCouponIndex = i Continue ''*** THIS LINE DOESN''T COMPILE, nor does "Next" End If DF = Application.Run("SomeFunction"....) PV = PV + (DF * Coupon / CouponFrequency) Next

Sé que puedo hacer:

If (Schedule(i, 1) < ReferenceDate) Then Continue For

pero quiero poder registrar el último valor de i en la variable PrevCouponIndex.

¿Algunas ideas?

Gracias


¿No podrías hacer algo simple como esto?

For i = LBound(Schedule, 1) To UBound(Schedule, 1) If (Schedule(i, 1) < ReferenceDate) Then PrevCouponIndex = i Else DF = Application.Run("SomeFunction"....) PV = PV + (DF * Coupon / CouponFrequency) End If Next


Hola, también estoy enfrentando este problema y lo resuelvo usando el siguiente código de ejemplo

For j = 1 To MyTemplte.Sheets.Count If MyTemplte.Sheets(j).Visible = 0 Then GoTo DoNothing End If ''process for this for loop DoNothing: Next j


Puede usar un tipo de continue usando Do ... Loop While False anidado:

''This sample will output 1 and 3 only Dim i As Integer For i = 1 To 3: Do If i = 2 Then Exit Do ''Exit Do is the Continue Debug.Print i Loop While False: Next i


Tal vez trate de ponerlo todo al final si y use un else para omitir el código, esto lo hará para que no pueda usar el GoTo.

If 6 - ((Int_height(Int_Column - 1) - 1) + Int_direction(e, 1)) = 7 Or (Int_Column - 1) + Int_direction(e, 0) = -1 Or (Int_Column - 1) + Int_direction(e, 0) = 7 Then Else If Grid((Int_Column - 1) + Int_direction(e, 0), 6 - ((Int_height(Int_Column - 1) - 1) + Int_direction(e, 1))) = "_" Then Console.ReadLine() End If End If


VBA no tiene una palabra clave Continue o cualquier otra palabra equivalente para saltar inmediatamente a la siguiente iteración del ciclo. Sugeriría un uso juicioso de Goto como una solución alternativa, especialmente si esto es solo un ejemplo artificial y su código real es más complicado:

For i = LBound(Schedule, 1) To UBound(Schedule, 1) If (Schedule(i, 1) < ReferenceDate) Then PrevCouponIndex = i Goto NextIteration End If DF = Application.Run("SomeFunction"....) PV = PV + (DF * Coupon / CouponFrequency) ''....'' ''a whole bunch of other code you are not showing us'' ''....'' NextIteration: Next

Si eso es realmente todo tu código, sin embargo, @Brian es absolutamente correcto. Simplemente ponga una cláusula Else en su declaración If y termine con ella.


Continue For no es válido en VBA o VB6.

Desde esta página de MSDN parece que se introdujo en VB.Net en VS 2005./Net 2.

Como los demás han dicho, no existe otra opción que usar Goto o un Else .