J'ai une boucle for sur un tableau. Ce que je veux faire, c'est tester une certaine condition dans la boucle et passer à la prochaine itération si vrai:
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
Je sais que je peux faire:
If (Schedule(i, 1) < ReferenceDate) Then Continue For
mais je veux pouvoir enregistrer la dernière valeur de i dans la variable PrevCouponIndex.
Des idées?
Merci
Ne pourriez-vous pas faire quelque chose de simple comme celui-ci?
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
VBA n'a pas de Continue
ni aucun autre mot clé équivalent permettant de passer immédiatement à l'itération de boucle suivante. Je suggérerais une utilisation judicieuse de Goto
comme solution de contournement, en particulier s'il s'agit d'un exemple artificiel et que votre code réel est plus compliqué:
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 c'est vraiment tout votre code, @Brian est absolument correct. Il suffit de mettre une clause Else
dans votre instruction If
et d’en finir.
Vous pouvez utiliser une sorte de continue
en utilisant un Do ... Loop While False
imbriqué
'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
Continue For
n'est pas valide dans VBA ou VB6.
Depuis cette page MSDN , il semble avoir été introduit dans VB.Net dans VS 2005./Net 2.
Comme d'autres l'ont dit, il n'y a pas vraiment d'autre option que d'utiliser Goto
ou un Else
.
Bonjour, je suis également confronté à ce problème et je résous le problème en utilisant l'exemple de code ci-dessous.
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