Je voudrais parcourir les fichiers d'un répertoire en utilisant vba dans Excel 2010.
Dans la boucle, j'aurai besoin de:
- le nom du fichier, et
- la date à laquelle le fichier a été formaté.
J'ai codé ce qui suit qui fonctionne bien si le dossier ne contient pas plus de 50 fichiers, sinon c'est ridiculement lent (j'en ai besoin pour travailler avec des dossiers avec> 10000 fichiers). Le seul problème de ce code est que l'opération de recherche file.name
prend beaucoup de temps.
Code qui fonctionne mais qui est waaaaaay trop lent (15 secondes pour 100 fichiers):
Sub LoopThroughFiles()
Dim MyObj As Object, MySource As Object, file As Variant
Set MySource = MyObj.GetFolder("c:\testfolder\")
For Each file In MySource.Files
If InStr(file.name, "test") > 0 Then
MsgBox "found"
Exit Sub
End If
Next file
End Sub
Problème résolu:
- Mon problème a été résolu par la solution ci-dessous en utilisant
Dir
d'une manière particulière (20 secondes pour 15000 fichiers) et pour vérifier l'horodatage à l'aide de la commandeFileDateTime
. - La prise en compte d'une autre réponse en dessous des 20 secondes est réduite à moins d'une seconde.
code
Set MyObj = New FileSystemObjectObject
.Réponses:
Voici mon interprétation en tant que fonction à la place:
la source
Dir
prend des caractères génériques afin que vous puissiez faire une grande différence en ajoutant le filtre àtest
l'avance et en évitant de tester chaque fichierla source
Dir semble être très rapide.
la source
FileDateTime
mon problème est résolu.not
cependanttraverse the whole directory tree
. En cas de besoin: analystcave.com/vba-dir-function-how-to-traverse-directories/…La fonction Dir est le chemin à parcourir, mais le problème est que vous ne pouvez pas utiliser la
Dir
fonction récursivement , comme indiqué ici, vers le bas .La façon dont j'ai géré cela consiste à utiliser la
Dir
fonction pour obtenir tous les sous-dossiers du dossier cible et les charger dans un tableau, puis passer le tableau dans une fonction qui se reproduit.Voici une classe que j'ai écrite qui accomplit cela, elle inclut la possibilité de rechercher des filtres. ( Vous devrez pardonner la notation hongroise, cela a été écrit quand c'était à la mode. )
la source
Dir
la fonction perd le focus facilement lorsque je gère et traite des fichiers à partir d'autres dossiers.J'ai obtenu de meilleurs résultats avec le composant
FileSystemObject
.Un exemple complet est donné ici:
http://www.xl-central.com/list-files-fso.html
N'oubliez pas de définir une référence dans Visual Basic Editor à Microsoft Scripting Runtime (en utilisant Outils> Références)
Essaie!
la source
Essaye celui-là. ( LIEN )
la source