VBA列出子文件夹中没有FileSystemObject的所有文件(快速方式)

VBA列出子文件夹中没有FileSystemObject的所有文件(快速方式),vba,subdirectory,dir,Vba,Subdirectory,Dir,我正在寻找一种快速列出文件夹子文件夹中所有文件的方法。基于FileSystemObject的方法太慢-从网络驱动器(intranet)中列出416个文件名需要大约6分钟,因为我知道Dir()函数不允许循环子文件夹。请改用CMD: Sub SO() Const parentFolder As String = "C:\Users\bloggsj\folder\" '// change as required, keep trailing slash Dim results As String

我正在寻找一种快速列出文件夹子文件夹中所有文件的方法。基于FileSystemObject的方法太慢-从网络驱动器(intranet)中列出416个文件名需要大约6分钟,因为我知道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

它只是复制打开cmd.exe并运行DIR命令——但在我看来,它比FSO快得多。是否可以修改上述调用,一次只搜索特定的文件扩展名,如:.exe和.com?是的,将
“******”
更改为
“*.exe”
“*.com”“
例如。或者,您也可以过滤结果。我将编辑这篇文章来展示如何。如果我将“.”改为“*.xls”,它也会找到“.xlsm”文件,因此它会意识到包含的callLet us不相等。