Comment obtenir une liste de fichiers, y compris les sous-dossiers, et une liste de dossiers à l'aide de VBA (macro Excel).


Date de publication:12 juillet 2022.



INFOMARTION > Comment obtenir une liste de fichiers, y compris les sous-dossiers, et une liste de dossiers à l'aide de VBA (macro Excel).

Vue d'ensemble.

Je voudrais décrire comment obtenir une liste de fichiers et une liste de dossiers, y compris les sous-dossiers, en utilisant VBA (macro Excel). Cet article est destiné aux personnes qui souhaitent programmer les tâches suivantes

  • Je veux obtenir une liste de tous les fichiers ou dossiers sous un dossier avec leurs chemins complets.
  • Vous voulez effectuer un traitement en boucle pour les fichiers ou les dossiers sous un dossier.

Table des matières

  1. Méthode de programmation
  2. Description du code.
  3. résumé

1. Méthode de programmation

Des exemples de référence de la programmation sont donnés ci-dessous.

Puisqu'il est créé dans Function, je voudrais qu'il soit copié tel quel et que les appels de méthode soient effectués à 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

Pour l'utiliser, passez les éléments suivants comme arguments.

  • filePath・・・répertoire. Exemple.)C:\Users\user\Desktop\test
  • kind・・・Passez vrai, faux. Si True, renvoie une liste de fichiers. Si false, renvoie une liste de dossiers.
  • list・・・La collection est utilisée pour stocker les résultats. Un exemple de mise en œuvre est donné ci-dessous.

Un exemple de mise en œuvre d'un appel de fonction réel est présenté ci-dessous.

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

L'appel à getFolderOrFile stocke une liste de fichiers ou une liste de dossiers dans la liste. L'exemple d'implémentation est Faux, donc la liste des dossiers est stockée.

Décrivez le processus que vous souhaitez effectuer dans la section "TODO" de l'instruction "For". ITEM peut être traité comme une variable de type String.

La source de référence est le processus de mise en place de la liste acquise à A1 dans Excel. (Le processus écrase de façon répétée la même cellule.)

2. Description du code.

C'est la fin des instructions sur la façon d'utiliser le système, suivie d'une explication du code.

Les détails peuvent être vus dans le code, mais le point clé est l'appel supplémentaire à getFolderOrFile dans la méthode getFolderOrFile.

Dans le processus de recherche de dossiers, le processus est répété en appelant le processus de recherche de dossiers, qui est un mécanisme de recherche de tous les dossiers.

En appelant sa propre méthode, elle le fait de manière répétée tant que le dossier est trouvé, en cherchant dans tous les dossiers.

3. résumé

Si vous avez besoin d'aide pour savoir comment obtenir une liste de fichiers et une liste de dossiers, y compris les sous-dossiers, à l'aide de VBA (macros Excel), veuillez vous reporter à cette section.

Merci d'avoir regardé jusqu'à la fin.