1、 在 VBA 遍历文件夹和子文件夹中所有文件,常用两种方法,一种是使用 VBA 的 filesercth 对象,另外一种是使用 FileSystemObject(windows 文件管理工具) 和递归方法。兰色对代码进行了注解,希望对大家有所帮助第一种方法:使用 filesearch 对象Sub mysearch()Dim fs, i, arr(1 To 10000)Set fs = Application.FileSearch 设置一个搜索对象With fs.LookIn = ThisWorkbook.Path & “/“ 设置搜索路径.Filename = “*.xls“ 要搜索文件名和类
2、型.SearchSubFolders = True 是否需要搜索子文件夹If .Execute 0 Then 如果找不到文件MsgBox “There were “ & .FoundFiles.Count & _“ file(s) found.“ 显示文件找不到For i = 1 To .FoundFiles.Count 通过循环把所有搜索到的文件存入到数组中arr(i) = .FoundFiles(i)Next iSheets(1).Range(“A1“).Resize(.FoundFiles.Count) = Application.Transpose(arr) 把数组内的路径和文件名放在
3、单元格中ElseMsgBox “There were no files found.“End IfEnd WithEnd Sub第二种方法:引用 FileSystemObject 对象注意:要使用 FileSystemObject 对象,需要首先引用一下,具体方法,VBE-工具-引用-找到 miscrosoft scription runtime 项目并选中代码及注释:Dim ArrFiles(1 To 10000) 创建一个数组空间, 用来存放文件名称Dim cntFiles% 文件个数Public Sub ListAllFiles()Dim strPath$ 声明文件路径Dim i%Set
4、 fso = CreateObject(“Scripting.FileSystemObject“)Dim fso As New FileSystemObject, fd As Folder 创建一个 FileSystemObject 对象和一个文件夹对象strPath = ThisWorkbook.Path & “ “设置要遍历的文件夹目录cntFiles = 0Set fd = fso.GetFolder(strPath) 设置 fd 文件夹对象SearchFiles fd 调用子程序查搜索文件Sheets(1).Range(“A1“).Resize(cntFiles) = Applicat
5、ion.Transpose(ArrFiles) 把数组内的路径和文件名放在单元格中End SubSub SearchFiles(ByVal fd As Folder)Dim fl As FileDim sfd As FolderFor Each fl In fd.Files 通过循环把文件逐个放在数组内cntFiles = cntFiles + 1ArrFiles(cntFiles) = fl.PathNext flIf fd.SubFolders.Count = 0 Then Exit Sub SubFolders 返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的 Folders 集合For Each sfd In fd.SubFolders 在 Folders 集合进行循环查找SearchFiles sfd 使用递归方法查找下一个文件夹NextEnd Sub