Saltar al contenido

Macro par importar datos de un libro a otro de excel


Recommended Posts

publicado

Buenos días

Podríais ayudarme a refinar esta macro que realice con la grabadora.

Gracias

 

Sub MetodoAbrirLibro()

Workbooks.Open "C:\Users\jctorres\Desktop\pruebas partes automaticos\C2020-0138_Carga_Horas (1)2.xls"


    Windows("PARTE DE TRABAJOS EE-II.xlsm").Activate
    Sheets(13).Range("A8:f78").Copy
    Windows("C2020-0138_Carga_Horas (1)2.xls").Activate
    Sheets("Personal").Range("A8:f78").PasteSpecial xlPasteValues
        
    Windows("PARTE DE TRABAJOS EE-II.xlsm").Activate
    Sheets(13).Range("F2").Copy
    Windows("C2020-0138_Carga_Horas (1)2.xls").Activate
    Sheets("Personal").Range("G3").PasteSpecial xlPasteValues
    
    Windows("PARTE DE TRABAJOS EE-II.xlsm").Activate
    Sheets(13).Range("I2").Copy
    Windows("C2020-0138_Carga_Horas (1)2.xls").Activate
    Sheets("Personal").Range("H3").PasteSpecial xlPasteValues
    
    Windows("PARTE DE TRABAJOS EE-II.xlsm").Activate
    Sheets(13).Range("H2").Copy
    Windows("C2020-0138_Carga_Horas (1)2.xls").Activate
    Sheets("OT1").Range("h2").PasteSpecial xlPasteValues
    
    Windows("PARTE DE TRABAJOS EE-II.xlsm").Activate
    Sheets(13).Range("H3:m3").Copy
    Windows("C2020-0138_Carga_Horas (1)2.xls").Activate
    Sheets("OT1").Range("H3:m3").PasteSpecial xlPasteValues
 
    Windows("PARTE DE TRABAJOS EE-II.xlsm").Activate
    Sheets(13).Range("l2").Copy
    Windows("C2020-0138_Carga_Horas (1)2.xls").Activate
    Sheets("OT1").Range("l2").PasteSpecial xlPasteValues
    
    Windows("PARTE DE TRABAJOS EE-II.xlsm").Activate
    Sheets(13).Range("G8:H78").Copy
    Windows("C2020-0138_Carga_Horas (1)2.xls").Activate
    Sheets("OT1").Range("G8:H78").PasteSpecial xlPasteValues

    Windows("PARTE DE TRABAJOS EE-II.xlsm").Activate
    Sheets(13).Range("J8:K78").Copy
    Windows("C2020-0138_Carga_Horas (1)2.xls").Activate
    Sheets("OT1").Range("J8:K78").PasteSpecial xlPasteValues
    
    Windows("PARTE DE TRABAJOS EE-II.xlsm").Activate
    Sheets(13).Range("M8:M78").Copy
    Windows("C2020-0138_Carga_Horas (1)2.xls").Activate
    Sheets("OT1").Range("M8:M78").PasteSpecial xlPasteValues
   
    
    Windows("PARTE DE TRABAJOS EE-II.xlsm").Activate
    Application.CutCopyMode = False


End Sub

 

publicado

@Juan Carlos torres ruiz , te dejo una solución un poco a vuelapluma... Comprueba los rangos a copiar en cada hoja, creo que los he seguido bien, pero compruebalo. Como no has subido tus archivos para ver si se puede optimizar algo más, prueba el siguiente código:
 

Sub MetodoAbrirLibro()
Dim rngCopy As Range, rngOT1 As Range, cel As Range, adres$
Dim wbOr As Workbook, wbDes As Workbook

Application.ScreenUpdating = False

Set wbOr = ThisWorkbook
Set wbDes = Workbooks.Open("C:\Users\jctorres\Desktop\pruebas partes automaticos\C2020-0138_Carga_Horas (1)2.xls")

With wbOr.Sheets(13)
    .Range("A8:F78").Copy wbDes.Sheets("Personal").Range("A8:F78")
    .Range("F2").Copy wbDes.Sheets("Personal").Range("G3")
    .Range("I2").Copy wbDes.Sheets("Personal").Range("H3")

    Set rngOT1 = .Range("A:M")
    Set rngCopy = Intersect(rngOT1, Union(.Range("H2"), .Range("H3:M3"), .Range("12"), .Range("G8:H78"), .Range("J8:K78"), .Range("M8:M78")))

    For Each cel In rngCopy
        adres = cel.Address
        cel.Copy wbDes.Sheets("OT1").Range(adres)
    Next cel
End With

Application.CutCopyMode = False

End Sub

 

publicado
Hace 2 horas, Juan Carlos torres ruiz dijo:

Buenas , muchas gracias, me da un error con las celdas combinadas el resto lo hace perfecto.

Esto pasa por no subir los archivos... :(

Cambia el código del siguiente bucle a lo siguiente y prueba:
 

For Each cel In rngCopy
        adres = cel.Address
        wbDes.Sheets("OT1").Range(adres).FormulaR1C1 = cel.Text
Next cel

 

publicado
Hace 21 horas, Juan Carlos torres ruiz dijo:

Ahora que he pasado la macro al archivo original , me aparece este error, y por mas que le doy vueltas no consigo ver el fallo

Ese error es bastante inespecífico, aunque suele indicar que algo no encuentra. En tu caso creo que es por todos los nombres con rango que tienes. La manera de poder pasar los datos es separar el copy y el paste. Usa el siguiente código:
 

With wbOr.Sheets("EPYC")
    .Range("A8:F78").Copy
    wbDes.Sheets("Personal").Range("A8:F78").PasteSpecial xlPasteValues
    .Range("F2").Copy
    wbDes.Sheets("Personal").Range("G3").PasteSpecial xlPasteValues
    .Range("I2").Copy
    wbDes.Sheets("Personal").Range("H3").PasteSpecial xlPasteValues

    Set rngOT1 = .Range("A:M")
    Set rngCopy = Intersect(rngOT1, Union(.Range("H2"), .Range("H3"), .Range("l2"), .Range("G8:H78"), .Range("J8:K78"), .Range("M8:M78")))

    For Each cel In rngCopy
        adres = cel.Address
        wbDes.Sheets("OT1").Range(adres).FormulaR1C1 = cel.Text
    Next cel
End With

 

publicado

Muchas gracias , ya no da ese error.

Estoy duplicando la macro para que rellene mas hojas del archivo y me encuentro que que los datos de la celda h3 en la hoja ot2 se copia lo mismo que en la hoja ot1 .

Sub MetodoAbrirLibro()
Dim rngCopy As Range, rngOT1 As Range, cel As Range, adres$
Dim wbOr As Workbook, wbDes As Workbook

Application.ScreenUpdating = False

Set wbOr = ThisWorkbook
Set wbDes = Workbooks.Open("C:\Users\jctorres\Desktop\pruebas partes automaticos\C2020-0138_Carga_Horas (1)2.xls")

With wbOr.Sheets("EPYC")
    .Range("A8:F78").Copy
    wbDes.Sheets("Personal").Range("A8:F108").PasteSpecial xlPasteValues
    .Range("F2").Copy
    wbDes.Sheets("Personal").Range("G3").PasteSpecial xlPasteValues
    .Range("I2").Copy
    wbDes.Sheets("Personal").Range("H3").PasteSpecial xlPasteValues

    Set rngOT1 = .Range("A:M")
    Set rngCopy = Intersect(rngOT1, Union(.Range("H2"), .Range("H3"), .Range("l2"), .Range("G8:H108"), .Range("J8:K108"), .Range("M8:M108")))

    For Each cel In rngCopy
        adres = cel.Address
        wbDes.Sheets("OT1").Range(adres).FormulaR1C1 = cel.Text
    Next cel
    
    Set rngOT2 = .Range("A:u")
    Set rngCopy = Intersect(rngOT2, Union(.Range("p2"), .Range("p3"), .Range("t2"), .Range("o8:p108"), .Range("r8:s108"), .Range("u8:u108")))

    For Each cel In rngCopy
        adres = cel.Address
        wbDes.Sheets("OT2").Range(adres).FormulaR1C1 = cel.Text
    Next cel
    
     Set rngOT3 = .Range("W:AC")
    Set rngCopy = Intersect(rngOT3, Union(.Range("H2"), .Range("H3"), .Range("l2"), .Range("G8:H108"), .Range("J8:K108"), .Range("M8:M108")))

    For Each cel In rngCopy
        adres = cel.Address
        wbDes.Sheets("OT3").Range(adres).FormulaR1C1 = cel.Text
    Next cel
    
      Set rngOT4 = .Range("AE:AK")
    Set rngCopy = Intersect(rngOT4, Union(.Range("H2"), .Range("H3"), .Range("l2"), .Range("G8:H108"), .Range("J8:K108"), .Range("M8:M108")))

    For Each cel In rngCopy
        adres = cel.Address
        wbDes.Sheets("OT4").Range(adres).FormulaR1C1 = cel.Text
    Next cel
End With

Application.CutCopyMode = False

End Sub

 

C2020-0138_Carga_Horas (1)2.xls

publicado
En 6/1/2021 at 19:44 , Juan Carlos torres ruiz dijo:

Estoy duplicando la macro para que rellene mas hojas del archivo

En el archivo que has subido no está la macro ?

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.