Como obter uma lista de ficheiros, incluindo subpastas, e uma lista de pastas usando VBA (macro Excel).


Data de Publicação:12 de Julho de 2022.



INFOMARTION > Como obter uma lista de ficheiros, incluindo subpastas, e uma lista de pastas usando VBA (macro Excel).

Visão geral.

Gostaria de descrever 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.

Obrigado por ter observado até ao fim.