while visual repetitivas recorrer otro for filas estructuras ejemplos dentro condiciones con columnas bucles bucle vba loops for-loop next

visual - for next vba excel ejemplos



Continuar por el bucle (7)

Tengo el siguiente código

For x = LBound(arr) To UBound(arr) sname = arr(x) If instr(sname, "Configuration item") Then ''**(here i want to go to next x in loop and not complete the code below)** ''// other code to copy past and do various stuff Next x

Así que pensé que podría simplemente tener la declaración Then Next x , pero esto da un error de "no declaración declarada".

Entonces, ¿qué puedo poner después de If instr(sname, "Configuration item") Then para que proceda al siguiente valor para x?


A veces hago un ciclo doble do:

Do Do If I_Don''t_Want_to_Finish_This_Loop Then Exit Do Exit Do Loop Loop Until Done

Esto evita tener "goto spaghetti"


Está pensando en una declaración continue como Java''s o Python''s , pero VBA no tiene esa declaración nativa, y no puede usar Next de VBA de esa manera.

Podrías lograr algo como lo que estás tratando de hacer usando una declaración GoTo lugar, pero realmente, GoTo debería reservarse para los casos donde las alternativas son artificiales y poco prácticas.

En su caso con una sola condición de "continuar", hay una alternativa realmente simple, limpia y legible:

If Not InStr(sname, "Configuration item") Then ''// other code to copy paste and do various stuff End If


Esto también se puede resolver usando un booleano.

For Each rngCol In rngAll.Columns doCol = False ''<==== Resets to False at top of each column For Each cell In Selection If cell.row = 1 Then If thisColumnShouldBeProcessed Then doCol = True End If If doCol Then ''Do what you want to do to each cell in this column End If Next cell Next rngCol

Por ejemplo, aquí está el ejemplo completo que:
(1) Identifica el rango de celdas utilizadas en la hoja de trabajo
(2) Bucles a través de cada columna
(3) SI el título de la columna es un título aceptado, pasa por todas las celdas de la columna

Sub HowToSkipForLoopIfConditionNotMet() Dim rngCol, rngAll, cell As Range, cnt As Long, doCol, cellValType As Boolean Set rngAll = Range("A1").CurrentRegion ''MsgBox R.Address(0, 0), , "All data" cnt = 0 For Each rngCol In rngAll.Columns rngCol.Select doCol = False For Each cell In Selection If cell.row = 1 Then If cell.Value = "AnAllowedColumnTitle" Then doCol = True End If If doCol Then ''<============== THIS LINE ========== cnt = cnt + 1 Debug.Print ("[" & cell.Value & "]" & " / " & cell.Address & " / " & cell.Column & " / " & cell.row) If cnt > 5 Then End ''<=== NOT NEEDED. Just prevents too much demo output. End If Next cell Next rngCol End Sub

Nota: Si no lo atrapó inmediatamente, la línea If docol Then es su CONTINUACIÓN invertida. Es decir, si doCol permanece False, la secuencia de comandos CONTINÚA en la celda siguiente y no hace nada.

Ciertamente, no es tan rápido / eficiente como un continue apropiado o next for enunciado, pero el resultado final es lo más cercano que he podido obtener.


Muchos años después ... Me gusta este:

For x = LBound(arr) To UBound(arr): Do sname = arr(x) If instr(sname, "Configuration item") Then Exit Do ''// other code to copy past and do various stuff Loop While False: Next x


Puede usar un GoTo :

Do ''... do stuff your loop will be doing '' skip to the end of the loop if necessary: If <condition-to-go-to-next-iteration> Then GoTo ContinueLoop ''... do other stuff if the condition is not met ContinueLoop: Loop


Unos años tarde, pero aquí hay otra alternativa.

For x = LBound(arr) To UBound(arr) sname = arr(x) If InStr(sname, "Configuration item") Then ''Do nothing here, which automatically go to the next iteration Else ''Code to perform the required action End If Next x


For i=1 To 10 Do ''Do everything in here and If I_Dont_Want_Finish_This_Loop Then Exit Do End If ''Of course, if I do want to finish it, ''I put more stuff here, and then... Loop While False ''quit after one loop Next i