
Eu uso um programa que exporta dados para várias planilhas e preciso de todos eles na mesma planilha, um abaixo do outro.
Sobre as planilhas - Eles variam em nomes a cada exportação, portanto isso não precisa ser definido, pois às vezes há mais de 100 planilhas diferentes.
Dentro das planilhas - há dados de linhas e colunas variadas (e preciso copiar até a linha em branco na planilha principal na próxima linha disponível que estiver em branco).
A planilha em que todos os dados também precisam ser copiados - inicialmente ficará em branco, porém preciso de todos os dados uns sobre os outros com base em uma cópia de linha das outras planilhas. (isso pode ter um nome definido, se necessário)
Sou novo no VBA, então espero que a explicação acima ajude.
Meu VBA atual não está funcionando:
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
Responder1
Eu gostaria de sugerir que o VBA (Macro) irá ajudá-lo a copiar o intervalo usado de todas as planilhas para o novo, funciona exatamente como consolidação de dados.
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
Como funciona:
- cópia de&Colareste código como Módulo.
- A macro criará uma nova planilha na pasta de trabalho existente denominada comoPlanilha Mestra, que é editável.
- Em vez de copiar dados da linha superior para a última, usei oFaixa Usadamétodo, pois acomodará todas as atualizações.
Responder2
isso é muito bom, mas preciso que ele atenda a uma faixa específica - pode ser feito, por favor?
Eu gostaria de sugerir que o VBA (Macro) irá ajudá-lo a copiar o intervalo usado de todas as planilhas para o novo, funciona exatamente como consolidação de dados.
SubCombinarDados()
Dim I As Long
Dim xRg As Range
On Error Resume Next
Worksheets.Add Sheets(1)
ActiveSheet.Name = "MasterSheet"
Para I = 2 Para Sheets.Count Definir 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 Como funciona:
Copie e cole este código como Módulo. A macro criará uma nova planilha na pasta de trabalho existente denominada MasterSheet, que é editável. Em vez de copiar os dados da linha superior para a última, usei o método UsedRange, pois acomodará todas as atualizações.