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
  2. Descrição do código.
  3. resumo

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.

■INFORMATION

Artigos


■PROFILE

Perfil


■Contacto

Contacto