Macro para pegar en un libro nuevo

Estoy utilizando esta macro para copiar datos de un libro y pegarlo en un libro nuevo, pero como en la primera fila tengo algún espacio en blanco, no me copia hasta el final de fila, y cuando llega al espacio en blanco, copia hasta el final de la columna y únicamente copia esa parte, no llega hasta el final de la fila, ¿hay alguna solución para que me copie la fila entera? Muchas gracias por adelantado

Sub CopiarCeldas()
'Se definen objetos a utilizar
Dim wbDestino As Workbook, _
wsOrigen As Excel.Worksheet, _
wsDestino As Excel.Worksheet, _
rngOrigen As Excel.Range, _
rngDestino As Excel.Range
'Libro Excel destino
Set wbDestino = Workbooks.Open("Z:\Resumen censo.xlsx")
'Activarlo
ThisWorkbook.Activate
'Se indican las hojas de origen y destino
Set wsOrigen = Worksheets("Barbastro")
Set wsDestino = wbDestino.Worksheets("Hoja1")
'Inicializar los rangos de origen y destino
Set rngOrigen = wsOrigen.Range("A7")
u = wsDestino.Range("A" & Rows.Count).End(xlUp).Row + 1
Set rngDestino = wsDestino.Range("A" & u)
'Se selecciona rango de celdas origen
rngOrigen.Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
'Pegar datos en celda destino
rngDestino.PasteSpecial xlPasteAll
Application.CutCopyMode = False
'Guardar y cerrar el libro destino

1 respuesta

Respuesta
1

Es así cómo funciona la opción Down y to Right.

Para que te tome todo el rango cuando hay espacios puedes utilizar la siguiente instrucción. Te tomará desde A1... luego tendrás que descontar rangos de títulos, etc.

rgo = ActiveSheet.UsedRange.Address

O puedes tomar el rango desde abajo y desde el final a izquierda:

Por ejemplo, si ya sabes de antemano cuál es la col que llega a > nro de filas y cuál la fila que llega hasta el > nro de col, estas instrucciones te dan el rango máximo:

filx=range("A" & rows.count).end(xlup).row     'ultima fila según col A

colx = range("XX2").end(xltoleft).column        'última col según fila 2

rgo = range(cells(5,1), cells(filx,colx).address

Aquí la variable te devolverá el rango desde celda A5 hasta la última ocupada.

Muchas gracias por tu respuesta Elsa, pero aunque he llegado hasta el punto inicial que te he pasado, no tengo tanto manejo de Visual Basic como tu, podrías por favor indicarme que parte tengo que sustituir por la que me pones tu para que me de resultado? Muchísimas gracias de antemano

Un saludo

Desde donde se comenta:

'Se selecciona rango de celdas origen
           'aquí van las instrucciones para obtener el rango
'Pegar datos en celda destino

Entonces una opción, considerando que tus datos inician en A7 pero no sabemos cuál es la col ni la fila que más datos presenta, sería:

rgo = ActiveSheet.UsedRange.Address
filx = Range(rgo).Rows.Count
colx = Range(rgo).Columns.Count
Range(Cells(7, 1), Cells(filx, colx)). Copy

Sdos. Comenta si te queda aún alguna duda.

Elsa

Así mucho mejor, muchas gracias, he cambiado en la última línea colx por 35 porque solo quiero que me copie las 35 primeras columnas y esa parte solucionada.

Ya, para rizar el rizo y dejarlo perfecto, sería posible que cogiera, las 35 columnas, pero, al estar toda la hoja formulada, salvo la primera columna, me cogiera solo los registros por fila hasta las filas que están rellenadas, es decir que no me cogiera todas las filas, sino que dejara de copiar en el momento que la celda A35 (por ejemplo) deje de tener datos, así solo me cogería los datos que estuvieran completados (es una plantilla y la van rellenando y copiando todos los días)

Espero haberme explicado bien, si no me dices por favor y muchas gracias de nuevo, me estás evitando muchas horas de corta y pega, gracias!

un saludo

Cuando una celda tiene fórmula no está vacía... por lo tanto quedan incluídas dentro de los rangos a copiar.

Si solo hay que mirar la col A (no formulada) y al encontrar una vacía considerar esa fila como fin de rango, la instrucción debe buscar desde abajo:

filx = range("A" & rows.count).end(xlup).row

Y eso nos lleva al rango a copiar:

Range(Cells(7, 1), Cells(filx, 35)). Copy

Si esto aún no es lo que estás rizando por favor valora esta respuesta para darla por cerrada y deja una nueva con una imagen de tu hoja.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas