J'ai une boucle for sur un tableau. Ce que je veux faire, c'est tester une certaine condition dans la boucle et passer à l'itération suivante si c'est 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
vba
conditional
loops
Richard H
la source
la source
If (Schedule(i, 1) < ReferenceDate) Then Continue For
" En êtes-vous sûr?Continue
n'est pas un mot clé VBA.Réponses:
Tu ne pourrais pas faire quelque chose de simple comme ça?
la source
IF
pour le test, donc ce n'est pas si cher que cela. Vous devez cependant vous assurer que le résultat le plus courantSchedule(i, 1)
est moins queReferenceDate
pour éviter d'exécuter leElse
plus souvent que nécessaire. Sinon, utilisez(ReferenceDate>=Schedule(i, 1))
. (si le test est 50/50, pas besoin d'optimisation)VBA n'a pas de
Continue
mot clé ou tout autre mot clé équivalent pour passer immédiatement à l'itération de boucle suivante. Je suggérerais une utilisation judicieuse deGoto
comme solution de contournement, surtout s'il ne s'agit que d'un exemple artificiel et que votre vrai code est plus compliqué:Si c'est vraiment tout votre code, cependant, @Brian est absolument correct. Mettez simplement une
Else
clause dans votreIf
déclaration et en avez terminé.la source
On Error Goto
).Continue
déclaration). On peut soutenir que l'utilisation deContinue
dans d'autres langues devrait être évitée et donc devrait être évitée ici également. À certains égards, le lien que vous avez publié fait valoir mon point de vue. Le lien est vers laGoTo
déclaration dans VB.Net. VB.Net a à la fois une gestion des erreurs structurée et des instructionsContinue For
/Continue Do
. Il n'y a vraiment aucun besoin deGoTo
dans VB.Net; Je soupçonne qu'il a été laissé en place en grande partie pour prendre en charge une conversion plus facile du code VBA / VB6 existant.GoTo
a l'avantage de réduire l'imbrication. Sauter une itération de boucle sans ajouter un niveau d'indentation est, IMO, l'une des rares utilisations légitimes deGoTo
VBA / VB6. Surtout si vous extrayez le corps de la boucle dans sa propre procédure .Vous pouvez utiliser une sorte de
continue
en utilisant un imbriquéDo ... Loop While False
:la source
Continue For
n'est pas valide en VBA ou VB6.À partir de cette page MSDN, il semble avoir été introduit dans VB.Net dans VS 2005./Net 2.
Comme les autres l'ont dit, il n'y a pas vraiment d'autre option que d'utiliser
Goto
ou unElse
.la source
Salut, je suis également confronté à ce problème et je le résolve en utilisant l'exemple de code ci-dessous
la source
Essayez peut-être de mettre tout cela à la fin si et d'utiliser un autre pour ignorer le code, cela fera en sorte que vous ne puissiez pas utiliser le GoTo.
la source