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.
Vídeo aula para listar pastas e subpastas no Excel
Assista ao vídeo abaixo, caso prefira aprender como fazer para listar pastas e subpastas no Excel utilizando VBA assistindo a um vídeo.
Não se esqueça de se INSCREVER no nosso canal. E coloque o seu melhor e-mail abaixo para receber todas as nossas novidades em primeira mão.
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.
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”.
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”.
- Clique com o botão direito em “VBAProject (Pasta1)”. Uma nova janela irá aparecer.
- Clique em “Inserir”
- 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.
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
- 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.
- 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:
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.