【发布时间】:2015-09-16 22:12:40
【问题描述】:
我正在寻找一种方法来快速列出文件夹子文件夹中的所有文件。基于 FileSystemObject 的方法太慢了 - 列出来自网络驱动器(内联网)的 416 个文件名大约需要 6 分钟,因为我理解 Dir() 函数不允许循环遍历子文件夹。
【问题讨论】:
标签: vba subdirectory dir
我正在寻找一种方法来快速列出文件夹子文件夹中的所有文件。基于 FileSystemObject 的方法太慢了 - 列出来自网络驱动器(内联网)的 416 个文件名大约需要 6 分钟,因为我理解 Dir() 函数不允许循环遍历子文件夹。
【问题讨论】:
标签: vba subdirectory dir
改用 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
【讨论】:
"*.*"" 更改为"*.exe"" 或"*.com""。或者,您可以过滤结果。我将编辑帖子以显示如何。