Saltar al contenido

macro para copiar y pegar en distintas hojas sin abrirlas.


Recommended Posts

publicado

tengo esto es un libro:

[TABLE=width: 615]

[TR]

[TD]libro origen[/TD]

[TD]libro destino[/TD]

[TD]rango origen[/TD]

[TD]rango destino[/TD]

[/TR]

[TR]

[TD]c:\user\libro1.xlsx[/TD]

[TD]C:\AG\DO\[abc AG1.xlsx]CS'[/TD]

[TD]a6:x108[/TD]

[TD]a2297[/TD]

[/TR]

[TR]

[TD]c:\user\libro2.xlsx[/TD]

[TD]C:\AG\DO\[abc AG21.xlsx]CS'[/TD]

[TD]a6:x109[/TD]

[TD]a2298[/TD]

[/TR]

[TR]

[TD]c:\user\libro3.xlsx[/TD]

[TD]C:\AG\DO\[abc AG31.xlsx]CS'[/TD]

[TD]a6:x110[/TD]

[TD]a2299[/TD]

[/TR]

[TR]

[TD]c:\user\libro4.xlsx[/TD]

[TD]C:\AG\DO\[abc AG41.xlsx]CS'[/TD]

[TD]a6:x111[/TD]

[TD]a2300[/TD]

[/TR]

[TR]

[TD]c:\user\libro5.xlsx[/TD]

[TD]C:\AG\DO\[abc AG51.xlsx]CS'[/TD]

[TD]a6:x112[/TD]

[TD]a2301[/TD]

[/TR]

[TR]

[TD]c:\user\libro6.xlsx[/TD]

[TD]C:\AG\DO\[abc AG61.xlsx]CS'[/TD]

[TD]a6:x113[/TD]

[TD]a2302[/TD]

[/TR]

[/TABLE]

Me gustaria realizar macro que lo realice de forma automatica.

Es decir necesito que copie el rango a6:x108 del libro1 y lo copie en la hoja cs del libro ag1 en la celda a2297, y asi sucesivamente. No se si esto es posible.

Gracias de antemano.

ejemplo.rar

publicado
Hola, Grema90. Seguro, se puede, es algo bastante elemental en programación de Excel con VBA. Más tarde lo hago y te lo subo.

gracias, lo estare esperando para probar

publicado

Este codigo lo hace pero abre y cierra cada file:

Sub CopyIt() 
Dim wbCopy As Workbook
Dim wbPaste As Workbook

Application.ScreenUpdating = False
Set wbCopy = Workbooks.Open("full path here/Recent Faxes.xls")
Set wbPaste = Workbooks.Open("full path here/Current Documentation.xls")
wbCopy.Sheets(1).Range("AA47").Copy
With wbPaste.Sheets(1).Range("B25")
.PasteSpecial xlValues
.PasteSpecial xlFormats
End With
wbCopy.Close , False
wbPaste.Close , False
Application.ScreenUpdating = True
End Sub
[/CODE]

publicado

Hola, Grema90. He terminado tu código. Asumo que en

C:\AG\DO\[abc AG61.xlsx]CS

CS es para ti la hoja de destino. Como no especificas hoja de origen en los libros de origen, asumí que todos los datos de origen están siempre en la misma hoja, la cual tomé en cada libro de origen como Hoja1.

Lo que hice fue crear en un libro un botón el cual contiene todo el código de programación que hace la tarea para ti, utilizando las rutas que especificaste. Como verás no guardé mucha estética para ahorrar código, porque básicamente el código de cada cláusula es el mismo, lo que varían son ciertos datos.

Verás algunos parpadeos durante la ejecución del código de programación, es en el momento cuando se abren los archivos, los oculto, los hago aparecer y finalmente los cierro.

El código del botón es el siguiente:

Private Sub CommandButton1_Click()

Dim i As Integer

Application.DisplayAlerts = False

For i = 1 To 6

Select Case i

Case 1

strLibroOrigen = "C:\user\libro1.xlsx"

strLibroDestino = "C:\AG\DO\abc AG1.xlsx"

Workbooks.Open strLibroOrigen 'Abre el archivo de origen especificado

Application.Windows(2).Visible = False

Workbooks.Open strLibroDestino 'Abre el archivo de destino especificado

Application.Windows(2).Visible = False

'Copiado:

Workbooks("libro1.xlsx").Worksheets(1).Range("A6:X108").Copy

Workbooks("abc AG1.xlsx").Worksheets("CS").Paste Destination:=Workbooks("abc AG1.xlsx").Worksheets("CS").Range("A2297")

Application.Windows(2).Visible = True

Application.Windows(3).Visible = True

Workbooks(1).Saved = True 'No guarda los cambios para el libro de origen

Workbooks("libro1.xlsx").Close 'Cierra el archivo de origen

Workbooks(2).Save

Workbooks("abc AG1.xlsx").Close

Case 2

strLibroOrigen = "C:\user\libro2.xlsx"

strLibroDestino = "C:\AG\DO\abc AG21.xlsx"

Workbooks.Open strLibroOrigen 'Abre el archivo de origen especificado

Application.Windows(2).Visible = False

Workbooks.Open strLibroDestino 'Abre el archivo de destino especificado

Application.Windows(2).Visible = False

'Copiado:

Workbooks("libro2.xlsx").Worksheets(1).Range("A6:X109").Copy

Workbooks("abc AG21.xlsx").Worksheets("CS").Paste Destination:=Workbooks("abc AG21.xlsx").Worksheets("CS").Range("A2298")

Application.Windows(2).Visible = True

Application.Windows(3).Visible = True

Workbooks(1).Saved = True 'No guarda los cambios para el libro de origen

Workbooks("libro2.xlsx").Close 'Cierra el archivo de origen

Workbooks(2).Save

Workbooks("abc AG21.xlsx").Close

Case 3

strLibroOrigen = "C:\user\libro3.xlsx"

strLibroDestino = "C:\AG\DO\abc AG31.xlsx"

Workbooks.Open strLibroOrigen 'Abre el archivo de origen especificado

Application.Windows(2).Visible = False

Workbooks.Open strLibroDestino 'Abre el archivo de destino especificado

Application.Windows(2).Visible = False

'Copiado:

Workbooks("libro3.xlsx").Worksheets(1).Range("A6:X110").Copy

Workbooks("abc AG31.xlsx").Worksheets("CS").Paste Destination:=Workbooks("abc AG31.xlsx").Worksheets("CS").Range("A2299")

Application.Windows(2).Visible = True

Application.Windows(3).Visible = True

Workbooks(1).Saved = True 'No guarda los cambios para el libro de origen

Workbooks("libro3.xlsx").Close 'Cierra el archivo de origen

Workbooks(2).Save

Workbooks("abc AG31.xlsx").Close

Case 4

strLibroOrigen = "C:\user\libro4.xlsx"

strLibroDestino = "C:\AG\DO\abc AG41.xlsx"

Workbooks.Open strLibroOrigen 'Abre el archivo de origen especificado

Application.Windows(2).Visible = False

Workbooks.Open strLibroDestino 'Abre el archivo de destino especificado

Application.Windows(2).Visible = False

'Copiado:

Workbooks("libro4.xlsx").Worksheets(1).Range("A6:X111").Copy

Workbooks("abc AG41.xlsx").Worksheets("CS").Paste Destination:=Workbooks("abc AG41.xlsx").Worksheets("CS").Range("A2300")

Application.Windows(2).Visible = True

Application.Windows(3).Visible = True

Workbooks(1).Saved = True 'No guarda los cambios para el libro de origen

Workbooks("libro4.xlsx").Close 'Cierra el archivo de origen

Workbooks(2).Save

Workbooks("abc AG41.xlsx").Close

Case 5

strLibroOrigen = "C:\user\libro5.xlsx"

strLibroDestino = "C:\AG\DO\abc AG51.xlsx"

Workbooks.Open strLibroOrigen 'Abre el archivo de origen especificado

Application.Windows(2).Visible = False

Workbooks.Open strLibroDestino 'Abre el archivo de destino especificado

Application.Windows(2).Visible = False

'Copiado:

Workbooks("libro5.xlsx").Worksheets(1).Range("A6:X112").Copy

Workbooks("abc AG51.xlsx").Worksheets("CS").Paste Destination:=Workbooks("abc AG51.xlsx").Worksheets("CS").Range("A2301")

Application.Windows(2).Visible = True

Application.Windows(3).Visible = True

Workbooks(1).Saved = True 'No guarda los cambios para el libro de origen

Workbooks("libro5.xlsx").Close 'Cierra el archivo de origen

Workbooks(2).Save

Workbooks("abc AG51.xlsx").Close

Case 6

strLibroOrigen = "C:\user\libro6.xlsx"

strLibroDestino = "C:\AG\DO\abc AG61.xlsx"

Workbooks.Open strLibroOrigen 'Abre el archivo de origen especificado

Application.Windows(2).Visible = False

Workbooks.Open strLibroDestino 'Abre el archivo de destino especificado

Application.Windows(2).Visible = False

'Copiado:

Workbooks("libro6.xlsx").Worksheets(1).Range("A6:X113").Copy

Workbooks("abc AG61.xlsx").Worksheets("CS").Paste Destination:=Workbooks("abc AG61.xlsx").Worksheets("CS").Range("A2302")

Application.Windows(2).Visible = True

Application.Windows(3).Visible = True

Workbooks(1).Saved = True 'No guarda los cambios para el libro de origen

Workbooks("libro6.xlsx").Close 'Cierra el archivo de origen

Workbooks(2).Save

Workbooks("abc AG61.xlsx").Close

End Select

Next

Application.DisplayAlerts = True

End Sub

Espero haber sido de tu ayuda.

ejemplo.rar

publicado

Tanto la de armando como la de serviprofer lo hacen, gracias. Pero lo que queria es que la macro tome los valores de las celdas de la tabla, no hacer la macro con los valores que ya tengo, Los rangos van cambiando por lo que deberia editar la macro cada vez.

Otra cosa que podria hacer seria (para evitar el tema de rangos): en la tabla destino copiar a partir de una fecha mayor o igual que se encuentra en la columna g.

Es decir la tabla origen tiene fechas en la columna g (por meses) y debo pegarlo en la tabla destino a partir del primer registro que aparece del mes de la tabla origen, con esto evito el tema rangos.

esta es la formula que uso para saber el rango a copiar de la tabla origen

="A6:"&"X"&COINCIDIR( " End of Report";'C:\Users\Goyo\Desktop\TEMP DESCARGAS\[COTO_AGUDO.xls]Sheet1'!$A$6:$A$9108;0)+4

Este rango es que lo quiero pegar en la tabla destino. Y lo pegaria en la primera posicion del mes.

- - - - - Mensaje combinado - - - - -

esta es la macro que uso (solo para un registro, debo copiar y pegar 28 hojas)

Sub copiar()

Dim wbCopy As Workbook

Dim wbPaste As Workbook

Application.ScreenUpdating = False

Set wbCopy = Workbooks.Open("C:\Users\Goyo\Desktop\TEMP DESCARGAS\COTO_AGUDO.xls")

Set wbPaste = Workbooks.Open("C:\quick\AGUDO\ACTIVIDAD AGUDO\NSC AGUDO1.xlsx")

Workbooks("COTO_AGUDO.xls").Worksheets(1).Range("A6:X108").Copy

Workbooks("NSC AGUDO1.xlsx").Worksheets("Cotos").Paste Destination:=Workbooks("NSC AGUDO1.xlsx").Worksheets("COTOS").Range("A2450")

wbCopy.Close , False

wbPaste.Close , False

Application.ScreenUpdating = True

End Sub

Por otra parte, necesito que se pegen con formato destino, y no pregunte si deseo guardar el portapapeles, y si quiero guardar los cambios en la tabla destino.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.