VBA 无递归查找指定文件夹及其子文件夹中的文件
可以使用循环来实现查找指定文件夹及其子文件夹的功能,无需采用递归算法。具体步骤如下:
- 首先定义一个函数,传入要查找的文件夹路径和要查找的文件类型,函数返回值为符合条件的文件路径数组。
- 在函数中,创建一个文件夹对象,打开要查找的文件夹,获取该文件夹下所有文件和子文件夹的路径。
- 遍历文件夹下的所有文件和子文件夹,如果是文件夹,则调用该函数,获取该文件夹下符合条件的文件路径数组,将其加入结果数组中。
- 如果是文件,则判断其文件类型是否符合要查找的文件类型,如果是,则将其加入结果数组中。
- 返回结果数组。
下面是示例代码:
Function FindFiles(ByVal folderPath As String, ByVal fileType As String) As Variant()
Dim files() As Variant
ReDim files(0 To 0)
Dim folder As Object
Set folder = CreateObject("Scripting.FileSystemObject").GetFolder(folderPath)
Dim file As Object
For Each file In folder.Files
If Right(file.Path, Len(fileType)) = fileType Then
files(UBound(files)) = file.Path
ReDim Preserve files(0 To UBound(files) + 1)
End If
Next
Dim subFolder As Object
For Each subFolder In folder.SubFolders
Dim subFiles() As Variant
ReDim subFiles(0 To 0)
subFiles = FindFiles(subFolder.Path, fileType)
Dim subFile As Variant
For Each subFile In subFiles
files(UBound(files)) = subFile
ReDim Preserve files(0 To UBound(files) + 1)
Next
Next
ReDim Preserve files(0 To UBound(files) - 1)
FindFiles = files
End Function
使用示例:
Sub TestFindFiles()
Dim files() As Variant
files = FindFiles("C:\test", ".txt")
Dim file As Variant
For Each file In files
Debug.Print file
Next
End Sub
注意:该代码使用了动态数组,需要在使用前声明数组大小,并在使用后将数组大小调整为实际大小,否则可能会造成内存泄漏。
原文地址: https://www.cveoy.top/t/topic/nMSd 著作权归作者所有。请勿转载和采集!