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.
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
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
J'utilise Goto
For x= 1 to 20
If something then goto continue
skip this code
Continue:
Next x
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)
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