web-dev-qa-db-fra.com

VBA - comment passer conditionnellement une itération de boucle for

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

96
Richard H

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
30
Brian

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.

168
mwolfe02

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
26
Unhandled Exception

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.

13
Jon Egerton

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 
1
Singaravelan