Macro que copie una hoja entera en otra hoja de otro libro2, cuando encuentre una fila vacía en ese libro2

Tengo que ir guardando mes a mes los datos que tengo en un libro llamado MÉTRICAS.

Necesito una macro que copie todos los datos de las 7 hojas de MÉTRICAS y las pase a otro libro2 (DATOS MÉTRICAS), y que cada mes la macro copie debajo de los datos ya almacenados los nuevos datos; cambiando la fecha en la última columna de cada hoja de datos. Es decir, que copie en un libro2 las hojas de la 1 a la 7, y en cada última columna de cada hoja que ponga la fecha en la que se está realizando la copia (por ejm, 01/04/2021 o abr-21...), y que al mes siguiente se copien en libro2 los datos de mayo igual.

1 respuesta

Respuesta
1

H o l a Sara y bienvenida a TodoExpertos.

Podrías comentar en el siguiente orden:

1. Supongo que la macro va a estar en el libro que contiene las 7 hojas. Llamemos a este libro el libro origen.

2. Cómo se llaman las 7 hojas del libro origen.

3. En cuál fila inician los datos en las 7 hojas del libro origen.

4. En cuál fila está el encabezado de las 7 hojas del libro origen.

5. Cuáles columnas se van a copiar de las 7 hojas del libro origen.

Ahora vamos con el libro destino:

6. Cómo se llama el libro destino

7. Va a estar abierto el libro destino.

8. Si el libro destino está cerrado, en cuál carpeta está libro destino.

9. En el libro destino hay 7 hojas o solamente una hoja.

10. Cómo se llaman la o las hojas del libro destino.

11. Cuál es la última columna.

12. Lo de la fecha no lo entiendo.

¿En la última columna ya existe una fecha?

¿O quieres que se adicione una columna con la fecha, pero cuál fecha, la del día de ejecución, o en alguna celda vas a tener la fecha y que la macro tome esa fecha y la ponga en la "última columna"?


Contesta en el orden y no omitas ningún paso, de esa manera será más práctico crear la macro.

Si quieres deja pendiente el punto 12 de la fecha y trabajamos los puntos del 1 al 11.

Hola,

1.El libro origen se llama 05.Metricas JZT.MACROS

2.Se llaman: HViaje.datos, Mr MNT.datos, CBK.datos, H x avisos.datos, Eficiencia.datos, DOBR.datos, OBR.datos

3.En la fila 1 están los encabezados y a partir de la fila 2 aparecen los datos. Me gustaría que los encabezados se copiaran solo la primera vez, y que en los meses siguientes solo se copiaran los datos a partir de la fila 2 (en todas las hojas)

4. Fila 1

5. Se van a copiar todas las columnas que contiene datos de las hojas, hay hojas que contienen datos hasta la columnas W y otras hasta la AD, depende.

6. El libro destino se puede llamar DATOS METRICAS 

7. Puedo tener el libro destino abierto, no es problema eso, pero me gustaría que no fuese así.

8. En el libro destino no hay nada porque lo que quiero es crear un libro destino con las 7 hojas este primer mes, y que todos los meses se vayan copiando los datos en sus hojas correspondientes debajo de los datos que hay del mes anterior.

9.  C:\Users\palhassa\OneDrive - Schindler\Documentos\ANGEL\MÉTRICAS\Mis Metricas

10. Las hojas del libro destino quiero que se llamen igual que la hojas del libro origen.

12. Lo de la fecha es que quiero que aparezca en la columna siguiente a la última que tiene datos, la fecha del mes en el que se está haciendo la copia. Es decir, si hoja CBK.datos sus datos terminan en la columna CF, que en la siguiente columna la CG ponga abr-21 en todas las filas claro, y cuando se copien los datos de mayo que ponga may-21 y así... (si es posible)

Qué va a pasar con los datos del libro origen. Deben eliminarse. Te pregunto porque, si vuelves a ejecutar la macro, los registros van a copiarse nuevamente.

De acuerdo, prueba la siguiente macro.

Si los nombres de las hojas están como lo comentaste. Si el libro destino está cerrado. Entonces no tendrás problemas.

La primera vez creará un libro nuevo y lo guardará en la misma carpeta donde tienes el libro con la macro.

La fecha que pondrá en la última columna será la del día de la ejecución.

Es una macro compleja con varios detalles, tal vez haya que hacer algunos ajustes. Pero realiza pruebas, en primera instancia deberá realizar lo que solicitaste.

Sub Copiar_Hojas()
'Por Dante Amor
  Dim wb1 As Workbook, wb2 As Workbook
  Dim sh As Worksheet
  Dim hojas As Variant, h As Variant, fecha As Variant
  Dim destino As String
  Dim lc As Long, lr As Long, lr2 As Long, lr3 As Long
  Application.ScreenUpdating = False
  '
  Set wb1 = ThisWorkbook
  hojas = Array("HViaje.datos", "Mr MNT.datos", "CBK.datos", _
        "H x avisos.datos", "Eficiencia.datos", "DOBR.datos", "OBR.datos")
  '
  fecha = Format(Date, "mmm-yy")
  destino = "DATOS METRICAS.xlsx"
  '
  If Dir(wb1.Path & "\" & destino) = "" Then
    Set wb2 = Workbooks.Add
    For Each h In hojas
      wb2.Sheets.Add after:=wb2.Sheets(wb2.Sheets.Count)
      wb2.Sheets(wb2.Sheets.Count).Name = h
      wb1.Sheets(h).Cells.Copy
      wb2.Sheets(h).Range("A1").PasteSpecial xlPasteValues
      lc = wb1.Sheets(h).Cells(1, Columns.Count).End(1).Column + 1
      lr = wb1.Sheets(h).Range("A" & Rows.Count).End(3).Row
      wb2.Sheets(h).Range(wb2.Sheets(h).Cells(2, lc), wb2.Sheets(h).Cells(lr, lc)) = fecha
    Next
    wb2.SaveAs wb1.Path & "\" & destino
    wb2.Close False
  Else
    Set wb2 = Workbooks.Open(wb1.Path & "\" & destino)
    For Each h In hojas
      lr2 = wb2.Sheets(h).Range("A" & Rows.Count).End(3).Row + 1
      lc = wb1.Sheets(h).Cells(1, Columns.Count).End(1).Column + 1
      lr = wb1.Sheets(h).Range("A" & Rows.Count).End(3).Row
      wb1.Sheets(h).Range("A2", wb1.Sheets(h).Cells(lr, lc)).Copy
      wb2.Sheets(h).Range("A" & lr2).PasteSpecial xlPasteValues
      lr3 = wb2.Sheets(h).Range("A" & Rows.Count).End(3).Row
      wb2.Sheets(h).Range(wb2.Sheets(h).Cells(lr2, lc), wb2.Sheets(h).Cells(lr3, lc)) = fecha
    Next
    wb2.Close True
  End If
  '
  Application.ScreenUpdating = False
  Application.CutCopyMode = False
End Sub

Hola, 

No el libro inicial no se borrarán los datos. Cada mes se reescribe en el libro inicial los datos correspondientes a dicho mes.

No se me ejecuta la macro porque hay un error en esta línea: 

 If Dir(wb1.Path & "\" & destino) = "" Then

¿Qué dice el mensaje de error?

¿Modificaste algo en la macro?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas