obtenir la liste des sous-répertoires dans vba
- Je veux obtenir une liste de tous les sous-dossiers dans un dossier.
- Si cela fonctionne, je veux l'étendre à une fonction récursive.
Cependant, mon approche initiale pour obtenir les sous-dossiers échoue. Il montre, tout simplement, tout, y compris des fichiers:
sDir = Dir(sPath, vbDirectory)
Do Until LenB(sDir) = 0
Debug.Print sDir
sDir = Dir
Loop
La liste commence avec '..' et plusieurs dossiers, et se termine par".txt fichiers.
EDIT:
Je dois ajouter qu'il doit exécuter dans Word, Excel pas (beaucoup de fonctions ne sont pas disponibles dans Word) et il est d'Office 2010.
EDIT 2:
On peut déterminer le type de résultat à l'aide de
iAtt = GetAttr(sPath & sDir)
If CBool(iAtt And vbDirectory) Then
...
End If
Mais qui m'a donné de nouveaux problèmes, de sorte que je suis maintenant à l'aide d'un code basé sur Scripting.FileSystemObject
.
source d'informationauteur Matthias Pospiech
Vous devez vous connecter pour publier un commentaire.
Vous serait mieux avec le FileSystemObject. J'ai l'impression.
Appeler cela vous suffit, dire:
listfolders "c:\data"
Ici est une version Simple, sans l'aide de
Scripting.FileSystemObject
parce que je l'ai trouvé lent et peu fiable. En particulier, la.Name
la méthode, a été tout ralentir Aussi j'ai testé cette dans Excel, mais je ne pense pas que tout ce que j'ai utilisé ne serait pas disponible dans Word.Tout d'abord, quelques fonctions:
Ce joint deux chaînes pour créer un chemin de fichier similaires à
os.path.join
en python. Il est utile pour ne pas avoir besoin de vous rappeler si vous avez ajouté que "\" à la fin de votre chemin.- Ce que cela crée une collection de sous-éléments de répertoire racine
root_path
Cela crée une collection de sous-éléments dans le répertoire
root_path
que, y compris les dossiers et ensuite supprime les éléments qui ne sont pas des dossiers à partir de la collection. Et il peut éventuellement supprimer ces méchants.
et..
dossiersEnfin la fonction de recherche récursive basée sur quelqu'un d'autre fonction à partir de ce site qui a utilisé
Scripting.FileSystemObject
je n'ai pas fait de tests de comparaison entre cela et l'original. Si je trouve que le post de nouveau, je vais faire un lien. Notecollec
est passé par référence, afin de créer une nouvelle collection et appeler ce sous pour le remplir. PasservbType:=vbDirectory
pour tous les sous-dossiers.Ici est une solution VBA, sans l'aide d'objets externes.
En raison des limitations de la
Dir()
fonction, vous devez obtenir l'ensemble du contenu de chaque dossier à la fois, et non pas lors de l'exploration avec un algorithme récursif.MODIFIER
Cette version de fouilles dans des sous-dossiers et renvoie les noms de chemin d'accès complet au lieu de retourner simplement le nom de fichier ou dossier.
Ne PAS exécuter le test sur l'ensemble du disque C!!