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
.