Muchas Gracias por la anterior aclaracion. Abajo pongo el codigo del ejemplo de la clase pero utilizando for each
Dim ws As Worksheet Dim MsgContinuar As Byte Dim UltimaFilaOrigen, UltimaFilaDestino As Long
MsgContinuar = MsgBox("Se agruparán las tablas de igual estructura." + _ vbNewLine + vbNewLine + "Desea continuar?", vbYesNo + vbQuestion, "Deztaca")
If MsgContinuar = vbNo Then Exit Sub
' Agregar una nueva hoja antes de la primera ActiveWorkbook.Sheets.Add Before:=Sheets(1) ' Copiar los encabezados de la segunda hoja Sheets(2).Range("A1:G1").Copy Sheets(1).Range("A1") Columns("A:G").Select Columns("A:G").EntireColumn.AutoFit Sheets(1).Range("A2").Select
For Each ws In ThisWorkbook.Worksheets
If ws.Index <> 1 Then UltimaFilaOrigen = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row If UltimaFilaOrigen > 1 Then UltimaFilaDestino = Sheets(1).Cells(Sheets(1).Rows.Count, "A").End(xlUp).Row + 1 With Sheets(1).Range("A" & UltimaFilaDestino).Resize(UltimaFilaOrigen - 1, 7) .Value = ws.Range("A2:G" & UltimaFilaOrigen).Value End With End If
Buenos días, Osmani. Gracias por compartir el código. El enfoque con For Each está muy bien aplicado. Es una muy buena adaptación del ejemplo de clase y cumple perfectamente con el objetivo de agrupar tablas con la misma estructura.
Un saludo y gracias por tu dedicación. Saludos, Julia - Equipo Deztaca
En el caso del ejemplo , seria bueno agregar dos lineas de codigo despues de las que se copia el encabezado para ajustar el ancho de las columnas al texto del encabezado de la tabla. Pudiera ser las siguientes
Hola, Osmani. Gracias por el comentario y la sugerencia del ajuste de columnas.
Sobre tu duda: en esta macro se usa Activate porque el código trabaja con Select/Selection/ActiveSheet, y esos objetos siempre se refieren a lo que esté activo en ese momento. Por eso, si no activas la hoja correcta, Excel podría copiar/pegar desde otra hoja o tomar otro rango.
Pero ojo: no depende de si el bucle es For Next o For Each. Aunque uses For Each, si sigues usando Selection, igual vas a depender de activar. For Each solo hace más cómodo y legible recorrer las hojas
Hola Sergio una pregunta Si la ultima hoja no tuviera el nombre de deztaca sino sucursal4 y con datos estos se copiarian tambien y la macro para ahi o sigue o tenemos que ponerle un nombre de una hoja para que asi pare la macro al llegar al nombre donde queremos que pare
Hola, Álvaro. Claro, la macro ya cuenta las hojas con Sheets.Count, por lo que si quitas la condición que excluye la hoja "Deztaca" (If Sheets(i).Name <> "Deztaca") y dejas el bucle como For i = 2 To Cuenta, recorrerá todas las hojas desde la segunda hasta la última sin depender de nombres; de ese modo, copiará los datos de todas las hojas existentes sin necesidad de indicarle cuándo parar, ya que el bucle se detiene automáticamente al alcanzar la última hoja. Espero haber aclarado tu duda, y siempre es un gusto recibir sus comentarios.
Inicia sesión para dejar tu duda, comentario y/o respuesta