我理解这个问题的答案可能与另一个问题的答案类似,但这个问题是以不同的方式提出的。这个问题是基于这样一个事实,即用户,我不知道FileSearch
被删除了。另一个是基于概念的,包含excel 2010年变更的先验知识......
我找到了一些代码here
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中的简单内容之外,我对File I / O知之甚少。
答案 0 :(得分:1)
FileSearch
已从Office 2007中的VBA中删除。值得庆幸的是,使用FileSystemObject创建自己的例程来搜索文件并不困难(添加Windows Scripting Runtime作为获取Intellisense代码提示的参考)
这是我使用的那个 - 你的文件列表将由FileList函数作为Collection返回。为此添加过滤器应该很简单,只使用特定扩展名的文件填充集合。
[请注意,您需要添加上面提到的Windows Scripting Runtime引用,因为在我的示例中对象是早期绑定的]
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
答案 1 :(得分:1)
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