Excel VBA遍历文件夹及子文件夹获取文件列表的代码修改求助
VBA遍历指定文件夹及所有子文件夹文件的解决方案
完整修改后代码
Sub getfiles() Dim oFSO As Object Dim oFolder As Object Dim i As Integer ' 初始化行计数器,从第1行开始写入 i = 0 Set oFSO = CreateObject("Scripting.FileSystemObject") ' 可修改此处的路径为目标文件夹路径 Set oFolder = oFSO.getfolder("C:\Users\cirklta\Desktop\excel reports") ' 调用递归处理逻辑 ProcessFolder oFolder, i ' 释放对象资源 Set oFile = Nothing Set oFolder = Nothing Set oFSO = Nothing End Sub ' 递归处理文件夹的子过程 Sub ProcessFolder(ByVal oFolder As Object, ByRef i As Integer) Dim oFile As Object Dim oSubFolder As Object ' 遍历当前文件夹下的所有文件,保留原有筛选和写入逻辑 For Each oFile In oFolder.Files If oFile.DateLastModified > Now - 7 Then Cells(i + 1, 1) = oFolder.Path Cells(i + 1, 2) = oFile.Name Cells(i + 1, 3) = "RO" Cells(i + 1, 4) = oFile.DateLastModified i = i + 1 End If Next oFile ' 遍历当前文件夹下的所有子文件夹,递归调用自身处理 For Each oSubFolder In oFolder.SubFolders ProcessFolder oSubFolder, i Next oSubFolder End Sub
关键调整说明
- 新增
ProcessFolder递归子过程:每次拿到文件夹对象后,先处理当前层级的文件,再逐个调用处理所有子文件夹,实现全层级遍历 - 行计数器
i使用传址方式传递:保证递归过程中行号可以连续累加,不会出现行号重置、内容覆盖的问题 - 完全保留原有业务逻辑:筛选最近7天修改的文件、写入列的规则和原有代码完全一致,不需要额外调整业务规则
注意事项
- 若需要修改目标文件夹,直接调整
oFSO.getfolder方法内的路径即可 - 若不需要时间筛选,直接删除
If oFile.DateLastModified > Now - 7 Then对应的判断语句即可 - 若需要写入到指定工作表,可在
Cells前增加工作表限定,比如Sheet1.Cells避免写入到错误的工作表
内容的提问来源于stack exchange,提问作者Tadas
相关产品推荐
相关产品推荐

