在文件夹和子文件夹中search包含特定扩展名的所有文件

我明白,这个问题的答案可能与另一个类似,但问题是以不同的方式提出的。 这个问题是基于用户,我不知道FileSearch被删除的事实。 另一个是基于概念的,并且包含了Excel 2010的变化的先前知识。

我在这里find了一些代码

 Sub Search() Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True Set objSearch = objExcel.FileSearch objSearch.Lookin = "D:\Music" objSearch.SearchSubfolders = TRUE objSearch.FileName = "*.wma" objSearch.Execute For Each strFile in objSearch.FoundFiles Wscript.Echo strFile Next objExcel.Quit End Sub 

我尝试在我的机器上运行该代码,使其适应我的一个文件夹和文件夹内的扩展,但它返回了错误445(对象不支持此操作)。 我正在使用Excel 2010。

有谁知道发生了什么事? 我试图帮助一个同事,但是我不太了解VBA中简单的东西之外的文件I / O。

从Office 2007中的VBA中删除了FileSearch 。幸运的是,使用FileSystemObject(添加Windows脚本运行时作为获取Intellisense代码提示的参考)来创build自己的例程来search文件并不困难。

这是我使用的 – 您的文件列表将作为一个集合通过FileList函数返回。 添加一个filter应该很简单,只用特定扩展名的文件填充集合。

[请注意,如上所述,您需要添加Windows脚本运行时引用,因为对象在我的示例中是早期绑定的]

 Function FileList(Path As String) As Collection Dim FSO as New Scripting.FileSystemObject Dim StartingFolder As Scripting.Folder Set StartingFolder = FSO.GetFolder(Path) Set FileList = New Collection RecursiveGetFiles StartingFolder, FileList End Function Private Sub RecursiveGetFiles(StartingFolder As Scripting.Folder, ByRef FullFileList As Collection) Dim File As Scripting.File For Each File In StartingFolder.Files FullFileList.Add File, File.Path Next File Dim SubFolder As Scripting.Folder For Each SubFolder In StartingFolder.SubFolders RecursiveGetFiles SubFolder, FullFileList Next SubFolder End Function 

这个代码然后可以被一些父例程调用,即

 Sub Search(Path As String) Dim ListOfFiles As Collection Set ListOfFiles = FileList(Path) Dim File As Scripting.File For Each File In ListOfFiles Debug.Print File.Name Next File End Sub 
 Sub Search() Dim StrFile As String, Path As String, FileName As String Path = "D:\Music" FileName = "*.wma" StrFile = Dir(Path & FileName) Do While Len(StrFile) > 0 Msgbox StrFile StrFile = Dir Loop End Sub