Como utilizar una macro en muchos libros con nombre diferente.

Soy nuevo en el tema de las macros y no puedo resolver la situación que detallo:

Necesito copiar los datos de una Fila (que voy cambiando al avanzar en la planilla) y copiarlo en otra Fila de diferentes libros (que tienen nombres diferentes), pero en la Macro que puedo hacer siempre está nombrando un libro en concreto: Windows("48M2 S.A.. Xlsx"). Activate

¿Cómo puedo evitar poner el nombre del libro, de forma que lo pueda usar para todos los libros?

Intente poner esta Macro en el libro PERSONAL.XLSB, pero no logro que funcione.

Por favor, si alguien puede ayudarme que estoy bastante perdido.

Muchas gracias, Sergio.

Sub Macro1()
'
' Macro1 Macro
'
    ActiveCell.Offset(-5, -6).Range("A1:AX1").Select
    Selection.Copy
    Windows("48M2 S.A..xlsx").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveCell.Offset(1, 0).Range("A1").Select
End Sub

1 respuesta

Respuesta
2

Hay pocos detalles como para acercarte una respuesta precisa, no se sabe si el libro está abierto de antemano o si lo abris con alguna macro...

Digamos que en algún momento habrás abierto el libro... si es con alguna macro ese nombre debes guardarlo en una variable pública. Al inicio de algún módulo coloca:

Public libro2 as string

Luego cada vez que necesites mencionarlo escribirás:

Windows(libro2). Activate

Si con esto se resuelve tu consulta no olvides valorarla (Excelente o Buena) ... sino aclara los detalles y la seguimos tratando

Bunas tardes Elsa, te pido disculpas por la demora en responderte.

Algo no estoy haciendo bien, ya que me da este error. Intentaré explicarte un poco mejor, tengo un Libro1 donde cargo datos y luego necesito copiar y pegar datos en otros Libros2, Libro3, Libro4 y así sucesivamente. Todas los Libros los abro yo según en el que tenga que pegar los datos que copie del Libro1, los abro sin usar una Macro.

El problema es que la Macro que está en el Libro1 solo me pega en el Libro2, pero me tira error para pegar en el Libro3 y Libro4........necesitaría hacer una Macro para cada Libro, pero son aprox. 3.000 Libros......por eso necesitaría hacer una sola Macro en el Libro1 o en PERSONAL.XLSB, de forma que pueda utilizarla para pegar en cada libro indistintamente de su nombre.

Espero haberme explicado un poco mejor, y me puedas ayudar nuevamente.

Desde ya, muchas gracias por tu ayuda.

Te da error porque aún no sabe cuál es el Libro2 ya que lo abriste manualmente.

Confírmame si vas abriendo un libro por vez y allí pegas datos, luego abres otro y vuelves a ejecutar la macro. Así lo entiendo hasta aquí.

Otro caso sería si abres 3 o 4 libros al mismo tiempo e intentas pegar lo mismo en todos... aclarame

Buen día Elsa,

Voy abriendo de un libro a la vez, y allí pego datos, nunca necesito abrir 2 libros a la vez, ya que son diferentes clientes. Desde un Libro general (donde están todos los nuevos datos de todos los clientes, colocados en Fila) intento llevarles la cuenta corriente para cada cliente por separado, aquí es donde tengo tantos Libros nuevos.

Estaría bueno si el Libro de cada cliente pudiese abrirse directamente con una Macro en el momento de pegar los datos.

Espero haberte podido explicar lo que pretendo hacer con esta Macro.

Un saludo, gracias.

Dejo una macro de ejemplo.

Lo que se hace es permitirte buscar el libro de destino. Y allí, desde tu libro origen, se le copia una fila de datos. Luego el libro se cierra guardando los cambios. Luego puedes seleccionar otro rango y volver a ejecutar la macro para otro destino.

Sub macroLibros()
'x Elsamatilde
'declaro una variable para el libro activo
librox = ActiveWorkbook.Name
'se abre un libro buscandolo en el equipo
destino = Application.GetOpenFilename
'si la variable está vacía significa que cancelamos la ventana de diálogo y por lo tanto el proceso
If destino = False Then Exit Sub
'abrir el libro elegido
Workbooks.Open destino
'se guarda solo el nombre del libro (sin la ruta)
libro2 = ActiveWorkbook.Name
'se regresa al libro con los datos a copiar
Workbooks(librox).Activate
'se copian los datos ---- At: elegir alguna de las tantas maneras de copiar/pegar.
'en este ejemplo se copia el rango A:H de la fila activa colocándolo en la primer fila vacía de la hoja destino
ActiveWorkbook.Sheets(1).Range("A" & ActiveCell.Row & ":H" & ActiveCell.Row).Copy _
Destination:=Workbooks(libro2).Sheets(1).Range("A" & Workbooks(libro2).Sheets(1).Range("A" & Rows.Count).End(xlUp).Row + 1)
'opcional: guardar y cerrar el libro 2
Workbooks(libro2).Close True
End Sub

Espero esto resuelva tu consulta, en ese caso no olvides valorarla (Excelente o buena).

Como para el copiado de datos hay muchas variantes, si necesitas ayuda en ese tema por favor dejame una nueva consulta aclarando bien qué se copia y cómo se copia (con fórmulas, solo valores, con formatos o no, rangos a copiar, destino de la copia, etc.)

En la sección Guías de mi sitio hay una dedicada a este tema. Desde allí podrás descargar uno de los ejemplos por si te sirve para tu modelo.

Sdos!

Estimada Elsa, me sorprendiste con esta Macro, soy muy novato en esto de las macro, pero no me imaginaba que se podía hacer esto tan bien, me sirve muchísimo, ya me pondré bien a utilizarla y si necesito hacer alguna pequeña modificación te consulto nuevamente, pero hasta aquí estoy muy agradecido por tu respuesta, muy buena y muy rápido.

Un saludo, Sergio.

Buenas noches Elsa, lamentablemente no encuentro la forma de pegar solo los valores, no necesito pegar formatos. Por favor, ¿podrás ayudarme? El resto de la Macro está perfecta.

Muchas gracias.

Cambia las últimas líneas por estas:

'en este ejemplo se copia el rango A:H de la fila activa colocándolo en la primer fila vacía de la hoja destino
Set destino = Workbooks(libro2).Sheets(1)
ActiveWorkbook.Sheets("2016").Range("A" & ActiveCell.Row & ":H" & ActiveCell.Row).Copy
destino.Activate
Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1).Select
Selection.PasteSpecial (xlValues)
'opcional: guardar y cerrar el libro 2
Workbooks(libro2).Close True
End Sub

En este caso si el libro 2 se cierra estará todo bien, sino luego del pegado tendrás que volver a tu libro de origen con:

Workbooks(librox). Activate

Sdos!

* Si llegaras a necesitar algún otro ajuste por favor inicia una nueva consulta titulando el tema del que trata la consulta. Para este caso podría haber sido: Como pegar solo valores.

¡Gracias! 

De acuerdo Elsa, entiendo lo que me decís sobre iniciar una nueva consulta, la próxima lo haré así.

Con este último ajuste quedó perfecta la Macro.

Nuevamente muchas gracias por el ajuste de la Macro y por la velocidad de tu respuesta.

Un saludo cordial, Sergio

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas