You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 01:51:01