
Utilizo un programa que exporta datos a varias hojas y los necesito todos en la misma hoja, uno debajo del otro.
Acerca de las hojas de trabajo: los nombres varían en cada exportación, por lo que no es necesario definirlo, ya que a veces hay más de 100 hojas diferentes.
Dentro de las hojas de trabajo: hay datos de diferentes filas y columnas (y necesito copiarlos hasta la fila en blanco en la hoja principal en la siguiente fila disponible que esté en blanco).
La hoja de trabajo en la que también se deben copiar todos los datos: inicialmente estará en blanco, sin embargo, necesito todos los datos uno encima del otro en función de una copia de fila de las otras hojas de trabajo. (Esto puede tener un nombre definido si es necesario)
Soy nuevo en VBA, así que espero que la explicación anterior me ayude.
Mi VBA actual no funciona:
Sub SheetLoopPasteData()
Dim ws As Worksheet
Dim wsSheet As Worksheet
Set wsSheet = Sheets("Sheet2")
For Each ws In Worksheets
ws.Activate
variable = Cells(Rows.Count, 1).End(xlUp).Row
Rows("1:" & variable).Copy _
Destination:=wsSheet.Range("A" & (wsSheet.Range("A" & wsSheet.Rows.Count).End(xlDown).Row + 1))
Next
End Sub
Respuesta1
Me gustaría sugerir que VBA (Macro) lo ayudará a copiar el rango usado de todas las hojas de trabajo a Nuevo, funciona exactamente como Consolidación de datos.
Sub CombineData()
Dim I As Long
Dim xRg As Range
On Error Resume Next
Worksheets.Add Sheets(1)
ActiveSheet.Name = "MasterSheet"
For I = 2 To Sheets.Count
Set xRg = Sheets(1).UsedRange
If I > 2 Then
Set xRg = Sheets(1).Cells(xRg.Rows.Count + 1, 1)
End If
Sheets(I).Activate
ActiveSheet.UsedRange.Copy xRg
Next
End Sub
Cómo funciona:
- Copiar&Pegareste código como Módulo.
- La macro creará una nueva hoja en el libro de trabajo existente denominada comoHoja maestra, que es editable.
- En lugar de copiar datos desde la fila superior hasta la última, he usado elUsadoRangométodo, ya que se adaptará a todas las actualizaciones.
Respuesta2
Esto es muy bueno, pero lo necesito para un rango específico. ¿Se puede hacer, por favor?
Me gustaría sugerir que VBA (Macro) lo ayudará a copiar el rango usado de todas las hojas de trabajo a Nuevo, funciona exactamente como Consolidación de datos.
Subcombinar datos()
Dim I As Long
Dim xRg As Range
On Error Resume Next
Worksheets.Add Sheets(1)
ActiveSheet.Name = "MasterSheet"
Para I = 2 a Sheets.Count Set xRg = Sheets(1).UsedRange
If I > 2 Then
Set xRg = Sheets(1).Cells(xRg.Rows.Count + 1, 1)
End If
Sheets(I).Activate
ActiveSheet.UsedRange.Copy xRg
Next
Fin Sub Cómo funciona:
Copie y pegue este código como módulo. La macro creará una nueva hoja en el libro de trabajo existente denominada MasterSheet, que es editable. En lugar de copiar datos desde la fila superior hasta la última, he utilizado el método UsedRange, ya que se adaptará a todas las actualizaciones.