Copiar datos de varios libros en una hoja

Tengo varios libros llamados Libro Mayor, Deudores y Acreedores, lo que quiero es crear una macro para que en el Libro partidas abiertas hoja para-cm me copie el contenido de los 3 libros anteriores; pero lo que no se es como hacer para seleccionar el contenido hasta el final(dado que el contenido cambia así que necesito un código que seleccione hasta el final) y lo más difícil aun es luego de haber copiado la información de Libro Mayor entonces pararme en la celda final y seguir copiando la información de deudores, luego otra vez pararme al final y seguir copiando la información de acreedores.

1 respuesta

Respuesta

Para programar algo así hacen falta todos los detalles:

- Cómo indicarle a Excel los libros a utilizar. ¿Están en una misma carpeta o hay que buscarlos?

- ¿Cuántas hojas tiene cada archivo y cuántas se van a capturar?

- Imagen de los encabezados de las hojas a capturar. ¿Todas tienen los mismos encabezados?

- Toda la información que puedas aportar sería de ayuda para desarrollar una macro a tu medida.

- La copia se hará como valores, sin fórmulas ni formatos. Confirmar.

Sub completo()

application.ScreenUpdating = False
application.DisplayAlerts = False
Sheets("MODULO AM").Select
Cells.Select
Selection.ClearContents
Range("C8").Select
Sheets("ROBOT").Select
Sheets("RESUMÉN AM").Select
Range("B10:E10").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Range("C8").Select

Sheets("ROBOT").Select
Range("b2") = ActiveWorkbook.Name
Dim Libro As String

Libro = Range("b2").Value
Sheets("MODULO FI").Select
Range("B12").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy

Call SAP
Call SAP2

' am Macro
'

'
Workbooks.Open Filename:="d:\mis documentos\SAP\SAP GUI\ModuloAM.XLSX", ReadOnly:="True"
Range("A1:I1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows(Libro).Activate
'WindowState
Sheets("MODULO AM").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("K30").Select
Sheets("TD").Select
Range("B9").Select
application.CutCopyMode = False
ActiveSheet.PivotTables("Resumen AM").PivotCache.Refresh
Range("A3:D3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("RESUMÉN AM").Select
Range("B10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("G19").Select
Windows("ModuloAM.XLSX").Activate
Range("J25197").Select
ActiveWindow.Close
Windows(Libro).Activate

' fi Macro
'

'
Workbooks.Open Filename:="d:\mis documentos\SAP\SAP GUI\ModuloFI.XLSX", ReadOnly:="True"
Rows("1:1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$F$191").AutoFilter Field:=1, Criteria1:="<>"
Range("A1:C1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows(Libro).Activate
Sheets("MODULO FI").Select
Range("B11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Range("E27").Select
Windows("ModuloFI.XLSX").Activate
Range("E112").Select
ActiveWindow.Close SaveChanges:=False
Windows(Libro).Activate


' dep Macro
'

'
Sheets("DEPREC_AMORT").Select
Range("B9:D9").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Range("D11").Select
Workbooks.Open Filename:="d:\mis documentos\SAP\SAP GUI\CuadroActivos.XLSX", ReadOnly:="True"
Cells.Select
Selection.ClearOutline
Rows("1:1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$U$93").AutoFilter Field:=2, Criteria1:="E210700"
ActiveSheet.Range("$A$1:$U$93").AutoFilter Field:=2, Criteria1:="=E210700" _
, Operator:=xlOr, Criteria2:="=F119102"
Cells.Select
With Selection.Interior
.PatternColorIndex = xlAutomatic
.COLOR = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
ActiveSheet.Range("$A$1:$U$93").AutoFilter Field:=2
ActiveSheet.Range("$A$1:$U$93").AutoFilter Field:=2, Operator:= _
xlFilterNoFill
Range("B2:C2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows(Libro).Activate
Range("B9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("CuadroActivos.XLSX").Activate
Range("M2").Select
Range(Selection, Selection.End(xlDown)).Select
application.CutCopyMode = False
Selection.Copy
Windows(Libro).Activate
Range("D9").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("E14").Select
Windows("CuadroActivos.XLSX").Activate
Range("F65").Select
ActiveWindow.Close SaveChanges:=False


Windows(Libro).Activate
application.WindowState = xlMinimized
application.ActiveWindow.WindowState = xlMaximized
Sheets("ROBOT").Select
'ThisWorkbook.RefreshAll
On Error Resume Next
application.ScreenUpdating = True
application.DisplayAlerts = True
'MsgBox "Proceso terminado"

End Sub

ASÍ ES COMO LO HICE

Está un poco díficil seguir tu código.... tantos Select (ver ***)

Respondo al tema de tu consulta: '...pararme en la celda final y seguir copiando la información de deudores, luego otra vez pararme al final y seguir copiando la información de acreedor...'

Sheets("MODULO AM").Select
Range("A1").Select           'aquí debes buscar la última fila desde abajo  (ver *)
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Se busca desde abajo cuál es la última fila ocupada tomando siempre la col que tenga datos en todas sus filas. En este caso consideraré que es A.

Sheets("MODULO AM").Select
Range("A" & Range("A" & Rows.Count).End(xlUp).Row).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Lo mismo harás al intentar agregar el otro libro.

(***) te invito a mirar el video 11 de mi canal donde muestro otros modos de escribir código de modo más reducido, sin tantos Select.

Sdos.

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas