Macro que copie hojas en otro documento con hojas ya existentes.

Necesito una macro que copie las celdas de 3 hojas del documento origen

"OhnCF", "OhnSw", "OhnOp"

, en la primer fila vacia de las 3 hojas existentes en otro documento (OhnDoc.xlsm).

Con la macro que tengo, si elimino filas del archivo origen, las borra también en el archivo destino. Necesito que, una vez pegada la info en la ultima fila vacía del documento destino, limpie el documento origen, ya que es alimentado por otra macro.

El archivo origen es el puente entre dos documentos, la info que se almacena es temporal, y el archivo destino es el acumulador de información.

Muchas gracias por su tiempo,

Marcela.

Sub Copy()
'Act.Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    ruta = l1.Path & "\"
    '
    Set l2 = Workbooks.Open(ruta & "OhnDoc.xlsm")
    l2.Activate
    Set h2 = l2.Worksheets.Add
    For Each h In l2.Sheets
        Select Case h.Name
            Case "OhnCF", "OhnSw", "OhnOp"
                h.Delete
        End Select
    Next
    '
    l1.Sheets(Array("OhnCF", "OhnSw", "OhnOp")).Copy Before:=l2.Sheets(1)
    h2.Delete
    l2.Close True
    Application.ScreenUpdating = True
    MsgBox "Copia terminada", vbInformation
End Sub

1 Respuesta

Respuesta
1

Te anexo la macro para copiar la información de las celdas de las hojas origen, al final de las hojas destino.

Sub CopiarCeldas()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    ruta = l1.Path & "\"
    '
    On Error Resume Next
    Set l2 = Workbooks.Open(ruta & "OhnDoc.xlsm")
    On Error GoTo 0
    '
    hojas = Array("OhnCF", "OhnSw", "OhnOp")
    For i = LBound(hojas) To UBound(hojas)
        existe = False
        hoja = hojas(i)
        For Each h In l2.Worksheets
            If h.Name = hoja Then
                existe = True
                Exit For
            End If
        Next
        If existe Then
            Set h2 = l2.Worksheets(hoja)
            u = h2.UsedRange.Rows(h2.UsedRange.Rows.Count).Row + 1
            l1.Sheets(hoja).UsedRange.Copy h2.Cells(u, "A")
        Else
            l1.Sheets(hoja).Copy Before:=l2.Sheets(1)
        End If
        l1.Sheets(hoja).Cells.ClearContents
    Next
    '
    l2.Close True
    Application.ScreenUpdating = True
    MsgBox "Copia terminada", vbInformation
End Sub

S a l u d o s . D a n t e   A m o r

Recuerda valorar la respuesta.

Hola Dante!

Muchas gracias por su ayuda, esta macro anda excelente, solo me gustaría modificarle una sola cosa si es posible: cada vez que la ejecuto me deja una y a veces algunas, filas vacias, entre lo que pego la última vez y lo nuevo por pegar.

Cómo cree usted que deba modificarla?

Gracias!,

Marcela.

Dime en cuál columna de cada hoja siempre hay datos, es decir, si en la columna B siempre hay datos, puede ser que la última fila en la columna B sea la 17, pero en las otras columnas la última fila con datos sea la 12 o la 14, etc, entonces se toma como referencia la la columna B, ya que es la que siempre tiene datos y es la que contendrá la última fila con datos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas