Insertar n filas con VBA en fila 3 hasta contar items

Comienzo la macro para cargar información a la BBDD insertando las filas necesarias:

Sheets("BBDD").Select
Rows("2:2").Select
Selection.Copy
Rows("3:28").Select
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False

Pero necesito que en Rows("3:28").Select me tome la cantidad de items a cargar porque a veces es 1 y otras veces 10. He intentado de varias formas pero aparentemente mis conocimientos se quedan cortos a la hora de indicarle que quiero Rows("3:contar items de un rango especifico").Select

Agradezco la ayuda que me puedan brindar para resolver este pequeño gran inconveniente que me evitara tener que borrar filas sin información en la BBDD.

1

1 Respuesta

41.375 pts. La verdadera sabiduría está en saber que nunca terminas...

María Martinez,

Adjunto código para el desarrollo de tu consulta y para su revisión.

1. Primer caso: Basado en valor (número de items) ingresado en la celda A1.

Sub InsertarFilas()
'Basado en valor (número de items) ingresado en la celda A1.
Num_Items = Range("A1")
Rows("3:" & 2 + Num_Items).Insert Shift:=xlDown
End Sub

2. Segundo caso: Basado en el número de celdas no vacías a partir de la fila 3

Sub InsertarFilas_2()
'Basado en el número de celdas no vacías a partir de la fila 3
Num_Items = Range(Range("B3"), Range("B3").End(xlDown)).Rows.Count
Rows("3:" & 2 + Num_Items).Insert Shift:=xlDown
End Sub

Espero que te sirva y este acorde a tu necesidad. Cualquier consulta estaré atento.

Muchísimas gracias por tan pronta respuesta!

Mis conocimientos de VBA son bien limitados... he ido aplicando cosas vistas por aquí y por allá pero realmente me apasiona poder darle instrucciones a Excel para que aligere procesos.

Espero no resultar molesta si te pido más ayuda con esto porque resolví ese punto pero ahora se me bloquea más adelante...

De acuerdo a tu respuesta y mi compresión, así me quedo el código para insertar las filas necesarias en la BBDD:

Sheets("BBDD").Select
Rows("2:2").Select
Selection.Copy
Rows("3:" & 2 + [Fac.Compra! H2]).Insert Shift:=xlDown
Application.CutCopyMode = False
Pero ahora me surge el siguiente problema... ¿Cómo indicarle que complete información en los rangos deseados a partir de la cantidad de filas necesarias?

Por ejemplo: Completar Fecha Introduccion
Range("B3").Select
ActiveCell.FormulaR1C1 = "=TODAY()"
Range("B3").Select
Selection.AutoFill Destination:=Range("B3:B12"), Type:=xlFillDefault
Range("B3:B12").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Ahora el rango ya no puedo dejarlo especificado en las instrucciones.

Tendría que indicarle desde B3 hasta B(2 + [Fac. Compra! H2]) pero no sé cómo hacerlo...

Adjunto código correspondiente a tu consulta de insertar la fecha actual.

Sub FechaInsert()
Num_Items = Range("A1")
Range("B3").FormulaR1C1 = "=TODAY()"
Range("B3").AutoFill Destination:=Range("B3:B" & 2 + Num_Items), Type:=xlFillDefault
End Sub

Hola! Recién hoy pude retomar este tema.

Estoy aprendiendo mucho con tus respuestas! Ya hice algo de limpieza en el código al entender que es reduntante escribir .Select y en la siguiente línea comenzar con .Selection

Pero me dice que "Se ha producido el error '1004' en tiempo de ejecución: Error en el método AutoFill de la clase Range" y no entiendo el motivo.

Detallo el código hasta el momento:

Sub FacCompra()
Num_Items = Range("Fac.Compra!F10")
Application.ScreenUpdating = False
ActiveWorkbook.Save
Sheets("BBDD").Select
Rows("2:2").Copy
Rows("3:" & 2 + Num_Items).Insert Shift:=xlDown
Application.CutCopyMode = False
Range("B3").FormulaR1C1 = "=TODAY()"
Range("B3").AutoFill Destination:=Range("B3:B" & 2 + Num_Items), Type:=xlFillDefault
Range("B3:B" & 2 + Num_Items).Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Que bueno y me alegra que estés aprendiendo de pocos este tema muy emocionante que es VBA.

Con respecto a tu consulta, he ejecutado el código que proporcionaste y en las situaciones que la he ejecutado ha funcionado correctamente. Sería bueno que pudieras adjuntar el archivo que estas trabajando o brindar más detalle de como lo esta trabajando para poder revisarlo.

El método Selection, lo estas considerando en tu código pero líneas antes no hay ninguna instrucción que seleccione algún rango, ejecuta la instrucción pero quizás realice alguna acción no esperada, revisarlo de todas maneras.

Estaré atento a tu respuesta.

Ander GS.

Por favor, indicame como te hago llegar el archivo porque no encuentro la forma de hacerlo por aqui.

Puedes cargar el archivo en la nube por medio del dropbox o drive para luego compartir el enlace para su acceso.

Estaré atento a tu respuesta.

Ander GS.

Todo tuyo... ;)

2017-2018

Maria Martinez,

Adjunto código modificado para solucionar el inconveniente que tienes, es sólo condicionar el valor Num_Items dado que en el caso que tienes va ser igual al valor de 1 y eso genera el error ya que no puede generar el autollenado porque sólo es una celda.

If Num_Items > 1 Then
Rows("3:" & 2 + Num_Items).Insert Shift:=xlDown
Application.CutCopyMode = False
Range("B3").FormulaR1C1 = "=TODAY()"
Range("B3").AutoFill Destination:=Range("B3:B" & 2 + Num_Items), Type:=xlFillDefault
Range("B3:B" & 2 + Num_Items).Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If

Pruebalo y me comentas como te fue. Cualquier consulta estaré atento.

Por favor, no olvidar de valorar las respuestas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas