Listar arquivos e pastas recursivamente com Excel VBA
Data de Publicação:
Atualizado:
Artigos > Listar arquivos e pastas recursivamente com Excel VBA
status 2026 e uso seguro
Conclusão: Visite recursivamente cada pasta, emita os arquivos necessários e passe cada pasta filha de volta para o mesmo procedimento. Adicione tratamento de erros explícito e uma política para junções, links simbólicos, pastas ocultas e caminhos de acesso negado.
O que você aprenderá
- Como FileSystemObject expõe pastas, subpastas, arquivos, nomes e caminhos.
- Como a recursão constrói uma árvore completa e por que árvores profundas ou cíclicas precisam de salvaguardas.
- Como gravar resultados em uma planilha sem operações lentas célula por célula em grande escala.
A quem se destina: usuários do Excel que inventariam uma árvore de diretórios controlada do Windows.
Atualização para 2026: a amostra reflete o teste local original do autor. Valide as permissões e o comportamento do link em uma cópia da sua estrutura de diretórios e considere o PowerShell ou uma ferramenta de inventário dedicada para árvores muito grandes ou sensíveis à segurança.
Nota de segurança: os comandos e exemplos de configuração do artigo original não foram novamente executados num ambiente de produção atual. Antes de os aplicar, confirme as versões suportadas, as cópias de segurança, os controlos de acesso e o procedimento de reversão num ambiente de teste isolado.
Fontes primárias oficiais
Visão geral
Esta secção descreve como obter uma lista de ficheiros e uma lista de pastas, incluindo subpastas, usando VBA (macro Excel). O artigo é destinado a pessoas que queiram programar as seguintes tarefas
- Quero obter uma lista de todos os ficheiros ou pastas sob uma pasta com os seus caminhos completos.
- Pretende realizar o processamento em loop para ficheiros ou pastas sob uma pasta.
Tabela de Conteúdos
1. Método de programação
Apresentam-se a seguir exemplos de programação de referência.
Como é criado em Função, gostaria que fosse copiado tal como está e que as chamadas de método fossem feitas a partir de Sub.
'Parameter Examples
'## filePath C:\Users\user\Desktop\test\
'## kind false:folder, true:file
'## list
Function getFolderOrFile(filePath As String, kind As Boolean, list As Collection) As Collection
'delete\
Dim filePathEnd As String
filePathEnd = Right(filePath, 1)
If filePathEnd = "\" Then
filePath = Left(filePath, Len(filePath) - 1)
End If
'Folder existence check
Dim result As String
result = Dir(filePath, vbDirectory)
If result = "" Then
MsgBox "File does not exist!"
Exit Function
End If
If kind Then
Dim buf As String
buf = Dir(filePath & "\*.*")
Do While buf <> ""
list.Add filePath & "\" & buf
buf = Dir()
Loop
Else
list.Add filePath
End If
Dim folder As Object
With CreateObject("Scripting.FileSystemObject")
For Each folder In .GetFolder(filePath).SubFolders
getFolderOrFile folder.Path, kind, list
Next folder
End With
End Function
Para o utilizar, passe como argumentos o seguinte.
- filePath: directório. Exemplo.) C:\Users\user\Desktop\test
- kind: Passe verdadeiro, falso. Se Verdadeiro, devolve uma lista de ficheiros. Se falso, devolve uma lista de pastas.
- list: A colecção é utilizada para armazenar os resultados. Um exemplo de implementação é dado abaixo.
Um exemplo de implementação de uma chamada de função real é mostrado abaixo.
Sub test()
Dim list As Collection
Set list = New Collection
getFolderOrFile "C:\Users\user\Desktop\test", False, list
Dim item As Variant
For Each item In list
'------TODO------
ThisWorkbook.Worksheets(1).Cells(1, 1).Value = item
Next
End Sub
Chamando getFolderOrFile irá armazenar uma lista de ficheiros ou uma lista de pastas em lista. O exemplo de implementação é Falso, pelo que a lista de pastas é armazenada.
Descreva o processo que pretende fazer na secção "TODO" no For statement. O ITEM pode ser tratado como uma variável String.
A fonte de referência é o processo de definir a lista adquirida para A1 em Excel. (O processo repetidamente sobrescreve a mesma célula.)
2. Descrição do código.
Este é o fim das instruções sobre como utilizar o sistema, seguido de uma explicação do código.
Os detalhes podem ser vistos no código, mas o ponto chave é a chamada adicional para obterFolderOrFile no método getFolderOrFile.
No processo de procura de pastas, o processo é ainda repetido, chamando o processo de procura de pastas, que é um mecanismo de procura de todas as pastas.
Ao chamar o seu próprio método, chama repetidamente o seu próprio método desde que a pasta seja encontrada, pesquisando todas as pastas.
3. resumo
Se precisar de ajuda para obter uma lista de ficheiros e uma lista de pastas, incluindo subpastas, usando VBA (Excel macros), consulte esta secção.