Chciałbym przeglądać pliki katalogu za pomocą vba w programie Excel 2010.
W pętli będę potrzebować:
- nazwa pliku i
- data sformatowania pliku.
Zakodowałem następujące, co działa dobrze, jeśli folder nie ma więcej niż 50 plików, w przeciwnym razie jest absurdalnie wolny (potrzebuję go do pracy z folderami z> 10000 plików). Jedynym problemem tego kodu jest to, że operacja wyszukiwania file.name
zajmuje bardzo dużo czasu.
Kod, który działa, ale jest zbyt wolny (15 sekund na 100 plików):
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
Problem rozwiązany:
- Mój problem został rozwiązany przez poniższe rozwiązanie wykorzystujące
Dir
w określony sposób (20 sekund dla 15000 plików) i sprawdzanie znacznika czasu za pomocą poleceniaFileDateTime
. - Biorąc pod uwagę inną odpowiedź poniżej 20 sekund, skraca się do mniej niż 1 sekundy.
code
Wygląda na to, że brakuje Ci zestawu MyObj = New FileSystemObjectObject
.Odpowiedzi:
Oto moja interpretacja jako funkcji:
źródło
Dir
bierze symbole wieloznaczne, dzięki czemu można zrobić dużą różnicę, dodając filtr ztest
góry i unikając testowania każdego plikuźródło
Dir wydaje się być bardzo szybki.
źródło
FileDateTime
mój problem został rozwiązany.not
jednaktraverse the whole directory tree
. W razie potrzeby: analystcave.com/vba-dir-function-how-to-traverse-directories/…Funkcją Dir jest droga, ale problem polega na tym, że nie można użyć
Dir
funkcji rekurencyjnej , jak stwierdzono tutaj, w dół .Sposób, w jaki sobie z tym poradziłem, to użycie
Dir
funkcji, aby pobrać wszystkie podfoldery dla folderu docelowego i załadować je do tablicy, a następnie przekazać tablicę do funkcji, która się powtarza.Oto klasa, którą napisałem, która to osiąga, obejmuje możliwość wyszukiwania filtrów. ( Będziesz musiał wybaczyć notację węgierską, która została napisana, gdy była cała furia ).
źródło
Dir
funkcja łatwo traci ostrość, gdy przetwarzam i przetwarzam pliki z innych folderów.Z komponentem uzyskałem lepsze wyniki
FileSystemObject
.Pełny przykład podano tutaj:
http://www.xl-central.com/list-files-fso.html
Nie zapomnij ustawić odniesienia w edytorze Visual Basic do środowiska wykonawczego Microsoft Scripting Runtime (za pomocą Narzędzia> Referencje)
Spróbuj!
źródło
Spróbuj tego. ( LINK )
źródło