web-dev-qa-db-fra.com

Passer à la prochaine itération dans la boucle vba

J'essaie de créer une boucle conditionnelle simple qui ira à la prochaine itération si une condition est vraie. Le code que j'ai jusqu'ici est:

For i = 2 To 24
    Level = Cells(i, 4)
    Return = Cells(i, 5)

    If Return = 0 And Level = 0 Then
        'Go to the next iteration
    Else
    End If
Next

J'ai essayé GoTo NextIteration, mais l'erreur "Label non défini" apparaît. Cela a probablement une solution très simple, mais une aide serait très appréciée ... Merci.

17
Käse
For i = 2 To 24
  Level = Cells(i, 4)
  Return = Cells(i, 5)

  If Return = 0 And Level = 0 Then GoTo NextIteration
  'Go to the next iteration
  Else
  End If
  ' This is how you make a line label in VBA - Do not use keyword or
  ' integer and end it in colon
  NextIteration:
Next
28
B H

Ne faites rien une fois les critères remplis, sinon effectuez le traitement requis et la boucle For passera à l'élément suivant.

For i = 2 To 24
    Level = Cells(i, 4)
    Return = Cells(i, 5)

    If Return = 0 And Level = 0 Then
        'Do nothing
    Else
        'Do something
    End If
Next i

Ou changez la clause pour qu'elle ne soit traitée que si les conditions sont remplies:

For i = 2 To 24
    Level = Cells(i, 4)
    Return = Cells(i, 5)

    If Return <> 0 Or Level <> 0 Then
        'Do something
    End If
Next i
9
Tanner

J'utilise Goto

  For x= 1 to 20

       If something then goto continue

       skip this code

  Continue:

  Next x
2
Sam

La solution actuelle produit le même flux que votre OP . Elle n’utilise pas d’étiquettes, mais ce n’était pas une exigence de l’OP. Vous avez seulement demandé "une simple boucle conditionnelle qui passera à la prochaine itération si une condition est vraie", et comme cette lecture est plus propre, il s'agit probablement d'une meilleure option que celle qui utilise une étiquette .

Ce que vous voulez dans votre boucle for suit le modèle

If (your condition) Then
    'Do something
End If

Dans ce cas, votre condition est Not(Return = 0 And Level = 0), vous utiliseriez donc

For i = 2 To 24
    Level = Cells(i, 4)
    Return = Cells(i, 5)

    If (Not(Return = 0 And Level = 0)) Then
        'Do something
    End If
Next i

PS: la condition est équivalente à (Return <> 0 Or Level <> 0)

1
sancho.s

Le moyen le plus simple que j'ai trouvé pour passer à la prochaine itération à partir de n'importe quel point de la boucle (analogue de l'opérateur Continue en Pascal) consiste à utiliser une boucle supplémentaire à un seul passage et l'opérateur Exit For:

'Main loop
For i = 2 To 24
    'Additional single pass loop
    For t = 1 To 1
        Level = Cells(i, 4)
        Return = Cells(i, 5)

        If Return = 0 And Level = 0 Then
            'Go to the next iteration
            Exit For 
        Else
        End If
    Next
Next
0
Sergey Abramov