Ir ao conteúdo

Excel Erro na macro que agrupar vários arquivos excel em um só com várias abas.


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Boa tarde. 

 

Fui usar a macro que o @Midoridesenvolveu para agrupar arquivos excel em um único com várias abas, mas estou me deparando com erros. 

 

Eis a macro (desenvolvida por @Midori) :

 

image.png.71c4446b87a580bbb60391975bdc2c3a.png

 

 

Agora, eis o erro que estou me deparando: 

 

image.thumb.png.cbefe6bc86bb5c45da9cc9af5f961e06.png

 

 

image.thumb.png.4157ac0fa433b6b346609a69dfc41a83.png

 

 

Se possível, alguém poderia me ajudar? 

 

 

Postado

@Midoriacompanhe comigo. 

 

Esse é o diretório onde estão as duas planilhas que estou usando como teste: 

 

image.thumb.png.4532efd15bd028ec7fdfc6695fcdb96d.png

 

Eis os dois arquivos abertos. Note que as abas possuem o mesmo nome do arquivos. 

 

image.thumb.png.5de85228c7c5afd6672751f91a18a37b.png

 

image.thumb.png.a87052985e87d6c53023de2322b40595.png

 

Seguindo o que você falou, se é que entendi direito, inseri na linha em amarelo o nome do arquivo que desejo compilar todos os outros. image.thumb.png.e7a9ec5a20bdc36a854fbb7eec47aa57.png

 

O que não está correto?

Postado

@Luiz Filipe Porto Não é o nome do arquivo que deve ser especificado, mas da aba onde os dados devem ser colados. Se quiser colar tudo na mesma aba com o nome Tabela p.ex, o loop fica assim,

 

    Do Until Arquivo = ""
        Set Pasta = Workbooks.Open(Diretorio & Arquivo)
            Pasta.ActiveSheet.[A1].CurrentRegion.Copy
            
            With ThisWorkbook.Sheets("Tabela")
                Linha = .[A1].CurrentRegion.Rows.Count + 1
                .Cells(Linha, 1).PasteSpecial
            End With
            Pasta.Close
            Arquivo = Dir
    Loop

 

Postado

@Luiz Filipe Porto Será mais fácil ajudar se você der mais detalhes do que quer fazer. Explicando como os dados estão nas planilhas do diretório Teste e como você quer que eles sejam importados para a planilha Output que é onde tem a macro.

Postado

@MidoriVamos lá. Suponhamos que, no diretório que mencionei no print, haja 10 arquivos diferentes .xlsx. Todos com nome "1", "2","3"..... "10" (nomes de exemplo apenas).  Eu quero juntar todos esses arquivos em um novo arquivo cujo nome é Output (nome de exemplo apenas), de forma que esse arquivo output contenha 10 abas (cada aba será um desses 10 arquivos diferentes que estão no diretório). A primeira delas se chama aba "1", a segunda "2", a terceira "3", até a décima "10". 

 

Vamos supor também que todas essas 10 planilhas estejam preenchidas da mesma forma: Célula A1 até Célula E49 preenchidas com dados (apenas um exemplo também. não necessariamente todas as 10 estariam preenchidas desde a célula A1 até a célula E49. Suponhamos que o arquivo "2" esteja preenchido apenas da célula A1 até A8.)

 

 

  • Solução
Postado

@Luiz Filipe Porto A edição que deve ser feita como comentei antes é onde os dados deve ser colados. Assim a macro cria uma aba para cada arquivo. Veja se resolve,

 

Sub ImportaPlanilhas()
    Dim Arquivo     As String
    Dim Diretorio   As String
    Dim Pasta       As Workbook
    Dim Planilha    As Worksheet
    
    Diretorio = Environ("UserProfile") & "\Downloads\Teste\"
    Arquivo = Dir(Diretorio & "*.xlsx")
    
    Do Until Arquivo = ""
        Set Pasta = Workbooks.Open(Diretorio & Arquivo)
            Pasta.ActiveSheet.[A1].CurrentRegion.Copy
        Set Planilha = ThisWorkbook.Sheets.Add
            Planilha.Name = Replace(Pasta.Name, ".xlsx", "")
            Planilha.[A1].PasteSpecial
            Application.CutCopyMode = False
            Pasta.Close
            Arquivo = Dir
    Loop
End Sub

 

  • Curtir 1
Postado

@Luiz Filipe Porto Tem várias formas de fazer. A que acho mais simples é escolher um lugar na planilha para registrar a data da modificação, pode nas células das planilhas importadas ou então em outra aba para guardar só isso. Assim podemos aplicar algum algoritmo de ordenação para organizar as abas em ordem de modificação a partir da última data e hora. Para ordenar com base na célula X1 p.ex fica assim,

 

Sub ImportaPlanilhas()
    Dim Arquivo     As String
    Dim Diretorio   As String
    Dim Pasta       As Workbook
    Dim Planilha    As Worksheet
    
    Diretorio = Environ("UserProfile") & "\Downloads\Teste\"
    Arquivo = Dir(Diretorio & "*.xlsx")
    
    Do Until Arquivo = ""
        Set Pasta = Workbooks.Open(Diretorio & Arquivo)
            Pasta.ActiveSheet.[A1].CurrentRegion.Copy
        Set Planilha = ThisWorkbook.Sheets.Add
            Planilha.Name = Replace(Pasta.Name, ".xlsx", "")
            Planilha.[X1] = FileDateTime(Diretorio & Arquivo)
            Planilha.[A1].PasteSpecial
            Application.CutCopyMode = False
            Pasta.Close
            Arquivo = Dir
    Loop
    Call OrdenaPlanilha(ThisWorkbook)
End Sub

Sub OrdenaPlanilha(Pasta As Workbook)
    Dim I   As Integer
    Dim J   As Integer
    
    For I = 1 To Pasta.Sheets.Count - 1
        For J = 1 To Pasta.Sheets.Count - I - 1
            If Pasta.Sheets(J).[X1] < Pasta.Sheets(J + 1).[X1] Then
                Call Pasta.Sheets(J + 1).Move(Pasta.Sheets(J))
            End If
        Next J
    Next I
End Sub

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...