Bucle do while sin fin

Hola! Tengo un bucle para cree una serie numérica, quiero que se repita el mismo bucle hasta rellenar un rango de celdas determinadas (las celdas desbloqueadas del área de trabajo).

a = txtCelda.Value - 1
b = Range("J1").Value - 1
For i = a To b
ActiveCell.Offset(0, i - a).Value = i + 1
Next i
Selection.End(xlToRight).Select
Selection.Offset(0, 1).Select

Desde un numero que yo elijo desde el txtCelda a continuación se ejecuta el mismo bucle:

d = Range("G1").Value - 1
b = Range("J1").Value - 1
'Do While ActiveCell.Value = ""
For i = d To b
ActiveCell.Offset(0, i - d).Value = i + 1
Next i
Selection.End(xlToRight).Select
Selection.Offset(0, 1).Select
'Loop

Desde el numero fijo de la celda G1 y quiero que este se ejecute hasta la última celda desbloqueada. Lo intento con el bucle Do While mientras la celda activa este vacía, pero se me queda colgado y no se lo que falla.

Gracias

1 Respuesta

Respuesta
1

En el while

'Do While ActiveCell.Value = ""
For i = d To b
ActiveCell.Offset(0, i - d).Value = i + 1
Next i
Selection.End(xlToRight).Select
Selection.Offset(0, 1).Select
'Loop

Cambia esta línea

Selection.Offset(0, 1).Select

Por esta

Selection.Offset(1, 0).Select

Supongo que lo que quieres es ir al siguiente registro hacia abajo.

Saludos. Dam

No, esa linea se supone que me active la celda siguiente a cuando termina el bucle for y si esta esta vacía que me vuelva a ejecutar el bucle for hasta que la celda no este vacía o llegue a la última celda del área de trabajo.

Con esta línea
Selection.End(xlToRight).Select
Te vas a la última celda de la derecha que tiene datos, luego con esta línea
Selection.Offset(0, 1).Select
Seleccionas la siguiente celda, que siempre va a ser una celda vacía
Luego inicias el While y preguntas si la celda está vacía, como la celda siempre es vacía inicia el ciclo y por eso no se sale del ciclo.
Esa es la explicación de por qué se queda colgado el bucle, para corregirlo, podrías preguntar primero por la última celda de la derecha que tenga datos y si el for o el while llegan a esa celda, que ahí se detengan los bucles.
Con esta instrucción puedes conocer la última celda con datos desde la celda activa
ucol = Cells(activecell.row, Columns.Count).End(xlToLeft).Column
Y si la columna es igual a la columna donde está la celda activa, quiere decir que no hay datos hacia a la derecha y el bucle se va a repetir hasta el final de la hoja. Entonces deberías definir una celda final para que el bucle no se siga.
La macro quedaría así:
d = Range("G1").Value - 1
b = Range("J1").Value - 1
ucol = Cells(ActiveCell.Row, Columns.Count).End(xlToLeft).Column
If ucol = ActiveCell.Column Then
'no hay datos hacia la derecha
'definir un número de columna final
ucol = 100
End If
Do While ActiveCell.Value = "" And ActiveCell.Column < ucol
For i = d To b
ActiveCell.Offset(0, i - d).Value = i + 1
Next i
Selection.End(xlToRight).Select
Selection.Offset(0, 1).Select
Loop
End Sub

Prueba y me comentas.

Saludos. Dam

Excelente Dam, solución perfecta como decimos en mi pueblo me has salvado el pellejo.

Muchísimas gracias y que tengas unas Felices Pascuas y un Prospero Año 2013.

Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas