2015-06-30 3 views
2

Я ищу способ быстрого перечисления всех файлов из подпапок папки. Подход, основанный на FileSystemObject, слишком медленный - для перечисления 416 имен файлов из сетевого диска (интрасети) требуется около 6 минут, так как я понимаю, что функция Dir() не позволяет циклически вставлять вложенные подпапки.VBA Список всех файлов (быстрый путь) в подпапках без FileSystemObject

ответ

3

Используйте CMD вместо:

Sub SO() 

Const parentFolder As String = "C:\Users\bloggsj\folder\" '// change as required, keep trailing slash 

Dim results As String 

results = CreateObject("WScript.Shell").Exec("CMD /C DIR """ & parentFolder & "*.*"" /S /B /A:-D").StdOut.ReadAll 

Debug.Print results 

'// uncomment to dump results into column A of spreadsheet instead: 
'// Range("A1").Resize(UBound(Split(results, vbCrLf)), 1).Value = WorksheetFunction.Transpose(Split(results, vbCrLf)) 
'//----------------------------------------------------------------- 
'// uncomment to filter certain files from results. 
'// Const filterType As String = "*.exe" 
'// Dim filterResults As String 
'// 
'// filterResults = Join(Filter(Split(results, vbCrLf), filterType), vbCrLf) 
'// 
'// Debug.Print filterResults 
End Sub 
+0

это действительно быстро – Qbik

+1

Это просто тиражирование открытия cmd.exe и запустив команду DIR - это намного быстрее, чем FSO на мой взгляд, хотя. –

+0

Возможно ли изменить вышеуказанный вызов для поиска только для определенных расширений файлов одновременно: .exe и .com? – Qbik

Смежные вопросы