Como combinar várias pastas de trabalho do excel usando vba?
Para combinar várias pastas de trabalho do Excel, você precisa usar algum código que permita escolher quais arquivos deseja combinar ou pode consultar um local de caminho específico e combinar todos os arquivos do Excel na pasta de trabalho atual.
VBA combina várias pastas de trabalho
Você pode usar o código a seguir, que usa o local que mencionei na variável path (uma pasta na área de trabalho do meu sistema).
Dim Path As String Dim Filename As String Dim Sheet As Worksheet Path = "C:UsersDellDesktopsample-data" Filename = Dir(Path & "*.xlsx") Do While Filename <> "" Workbooks.Open Filename:=Path & Filename, ReadOnly:=True For Each Sheet In ActiveWorkbook.Sheets Sheet.Copy After:=ThisWorkbook.Sheets(1) Next Sheet Workbooks(Filename).Close Filename = Dir() Loop
Etapas para combinar arquivos Excel usando VBA
- Abra o Editor do Visual Basic (certifique-se de habilitar a guia Desenvolvedor se já a tiver na Faixa de Opções).
- Depois disso, localize a pasta de trabalho atual na janela do projeto (control + r) e insira um novo módulo nela.
- Você terá uma janela de código no módulo (clique duas vezes nela) onde deverá colar o código que possui (como está).
- A partir daqui, você precisa alterar o valor da variável path com o local da pasta onde estão localizados todos os arquivos Excel que você deseja combinar.
- No final, execute o código e você obterá todas as planilhas da pasta de trabalho no arquivo atual.
Links úteis: Executar uma macro – Gravador de macro – Editor Visual Basic – Manual pessoal de macros
Este código abre cada arquivo um por um e copia cada planilha uma por uma e cola no arquivo atual com o mesmo nome. Aqui está o mesmo código, mas com a tela sendo atualizada para false no início para executar tudo no backend.
Dim Path As String Dim Filename As String Dim Sheet As Worksheet Application.ScreenUpdating = False Path = "C:UsersDellDesktopsample-data" Filename = Dir(Path & "*.xlsx") Do While Filename <> "" Workbooks.Open Filename:=Path & Filename, ReadOnly:=True For Each Sheet In ActiveWorkbook.Sheets Sheet.Copy After:=ThisWorkbook.Sheets(1) Next Sheet Workbooks(Filename).Close Filename = Dir() Loop Application.ScreenUpdating = True End Sub
Observação: se você quiser aprender como combinar dados de várias pastas de trabalho em uma única tabela, consulte este guia.