Listar todas as pastas e subpastas de um diretório e salvar a listagem em uma planilha

Neste artigo, iremos tratar uma dúvida enviada por um dos nossos leitores, aonde será necessário listar todas as pastas e subpastas de um diretório.

O problema em questão é o seguinte, tem um diretório cheio de pastas, e dentro de algumas dessas pastas existem outras pastas(subpastas).

O nosso leitor, precisa salvar em uma planilha o nome de cada pasta e subpasta presentes no diretório inicial.

A ideia deste artigo é detalhar uma possível solução que possa resolver a demanda do nosso leitor.

Se você conseguir resolver de uma outra forma, deixa no comentário logo abaixo a sua solução.

Em resumo, a nossa solução será feita utilizando o VBA, e o código irá listar todas as pastas e subpastas presentes em um diretório.

imagem titulo do tutorial listar todas as pastas e subpastas de um diretório

O que é FileSystemObject?

Antes de começarmos a colocar a mão na massa, precisamos explicar sobre o FileSystemObject, que será o principal responsável por permitir listar o que está dentro de um diretório.

O FileSystemObject permite acessar o sistema de arquivos do seu computador através do VBA, permitindo assim o VBA ir além do Excel.

Com ele que é possível acessar e alterar arquivos, pastas e diretórios no seu computador.

Segue abaixo alguns exemplos do que se pode fazer com o FileSystemObject:

  • Verificar se um arquivo existe
  • Verificar se uma pasta existe
  • Listar todos os arquivos dentro de uma pasta
  • Listar todas as pastas dentro de uma pasta
  • Mover um arquivo de um local para outro
  • Mover uma pasta de um local para outro

Agora, vamos começar a implementar a nossa solução.

Criar pastas e arquivos

Vamos criar as pastas e elas ficarão da seguinte forma:

  • C:\PASTA\teste1
  • C:\PASTA\teste2
  • C:\PASTA\teste3
  • C:\PASTA\teste4\teste5\teste6\TESTE61
  • C:\PASTA\teste4\teste5\TESTE6A
  • C:\PASTA\teste7
  • C:\PASTA\teste8\teste9

Criar a planilha

Vamos criar a tabela aonde iremos inserir os nomes das pastas e subpastas. 

Todas as pastas e subpastas serão listadas na coluna A, dessa forma a célula A1 será o cabeçalho e iremos inserir a palavras PASTAS nessa célula.

Tabela que receberá o nome de todas as pastas e subpastas de um diretório

Abrir o ambiente do VBA

Para podermos utilizar o VBA, primeiramente precisamos abrir o ambiente do VBA no Excel.

Para isso, vá na aba “Desenvolvedor” e clique em “Visual Basic”.

instruções mostrando como chegar no ambiente do VBA

Ao clicar em “Visual Basic” uma nova janela irá se abrir.

Essa nova janela é o ambiente do VBA e para podermos começar a escrever o código que será utilizado precisamos criar um “Módulo”.

Criando um módulo dentro do VBA

  1. Clique com o botão direito em “VBAProject (Pasta1)”. Uma nova janela irá aparecer.
  2. Clique em “Inserir”
  3. Clique em “Módulo”

Ao criar um “Módulo”(1), o fundo cinza que estava na parte direita da tela, será substituído por uma janela(2), e é nessa janela que iremos escrever o nosso código.

Módulo dentro do VBA criado

Listar todas as pastas e subpastas de um diretório

O script abaixo é a nossa solução para listar todas as pastas e subpastas de um diretório. 

A nossa solução começa na sub-rotina listar_pastas, nessa sub-rotina será feito uma listagem de cada pasta do diretório e ela irá passar para a sub-rotina listar_subpastas cada uma dessa pastas listadas para verificar a existência de uma ou mais subpastas.

Sub listar_subpastas(caminho_pasta as String)

    Dim fso As Object
    Dim folder As Object
    Dim file As Object
    Dim ultLinha As Integer
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(caminho_pasta)
    
    For Each file In folder.subfolders
    
        ultLinha = Sheets("Planilha1").Cells(Cells.Rows.Count, 1).End(xlUp).Row
        
        Sheets("Planilha1").Cells(ultLinha + 1, 1).Value = file.Name

        listar_subpastas (file.Path)
     
    Next file

End Sub
Sub listar_pastas()
 
    Dim fso As Object
    Dim folder As Object
    Dim file As Object
    Dim ultLinha As Integer
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder("C:\PASTA")
For Each file In folder.subfolders ultLinha = Sheets("Planilha1").Cells(Cells.Rows.Count, 1).End(xlUp).Row Sheets("Planilha1").Cells(ultLinha + 1, 1).Value = file.Name listar_subpastas (file.Path) Next file End Sub

  1. Sub-rotina listar_pastas
    • Dá linha 2 a 4 estamos declarando as variáveis que serão utilizadas.
    • A linha 5 e 6 são as mais importantes. São elas que vão permitir listar os arquivos e pastas dentro de um diretório. Na linha 6 o FileSystemObject será armazenado na variável “fso”. E na linha 6, a variável “fso” será utilizada para acessar as informações de uma pasta específica, no nosso caso o C:\PASTAS, utilizando a função GetFolder e irá armazenar o resultado na variável “folder”.
    • Da linha 7 a 10, a variável “folder” irá utilizar a função “subfolders” e listará as pastas dentro do diretório C:\PASTAS. O loop For Each será utilizado para acessar cada uma das pastas e irá salvar o nome da pasta na célula do Excel que está na coluna 1 e na linha referente a variável “ultLinha”. A variável “ultLinha”, irá verificar qual é a última linha preenchida da coluna A. E por último cada pasta será enviada a sub-rotina para verificar a existência de uma ou mais subpastas.
  2. Sub-rotina listar_subpastas
    • Dá linha 2 a 4 estamos declarando as variáveis que serão utilizadas.
    • A linha 5 e 6 são as mais importantes. São elas que vão permitir listar os arquivos e pastas dentro de um diretório. Na linha 6 o FileSystemObject será armazenado na variável “fso”. E na linha 6, a variável “fso” será utilizada para acessar as informações de uma pasta específica, no nosso caso a pasta armazenada na variável “caminho_pasta”, utilizando a função GetFolder e irá armazenar o resultado na variável “folder”.
    • Da linha 7 a 10, a variável “folder” irá utilizar a função “subfolders” e listará as subpastas dentro da pasta enviada a sub-rotina. O loop For Each será utilizado para verificar a existência de sub-pastas. Caso houver, ele irá listar cada uma das subpastas, e irá salvar o nome da subpasta na célula do Excel que está na coluna 1 e na linha referente a variável “ultLinha”. A variável “ultLinha”, irá verificar qual é a última linha preenchida da coluna A. E por último, cada subpasta sera enviada novamente a sub-rotina para verificar a existência de uma ou mais subpastas dentro da subpasta. E agora, caso não houver nenhuma sub-pasta, o loop For Each não será executado.

Rode o script acima. A sua planilha deverá ficar da seguinte forma:

Resultado da planilha após executar a macro para listar todas as pastas e subpastas de um diretório

Criar um botão

Para criar um botão é bem tranquilo, preparamos um artigo explicando detalhadamente como fazer para criar um botão que ao ser clicado executará uma macro. Basta clicar AQUI.

Compartilhe, Comente e SE INSCREVA

Chegamos ao final do artigo.

Se você curtiu esse tutorial, se inscreva para receber o nosso curso gratuito de VBA, assim como as nossas novidades.

E se tiver alguma dúvida, não esqueça de responder o nosso e-mail que você receberá ao confirmar a sua inscrição.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *