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

VBA代码优化需求:遍历子文件夹、统计全类型文件并输出至Excel

优化VBA代码实现递归统计文件夹及子文件夹文件数并写入Excel

以下是满足需求的优化代码,可实现递归遍历目标目录下所有层级的子文件夹、统计每个文件夹内的全部文件数量,并将文件夹路径和对应计数分别写入Excel的A、B列:

Sub CountFilesRecursively()
    Dim targetDir As String
    Dim fso As Object
    Dim ws As Worksheet
    Dim currentRow As Long
    
    ' 设置目标目录,也可改为让用户手动选择目录
    targetDir = "E:\2022\"
    
    ' 指定写入数据的工作表,建议改为具体表名如Sheet1避免误操作
    Set ws = ActiveSheet
    ' 清空原有数据(可选,按需保留)
    ws.UsedRange.Clear
    ' 设置表头
    ws.Cells(1, "A").Value = "文件夹路径"
    ws.Cells(1, "B").Value = "文件总数"
    currentRow = 2
    
    ' 创建FileSystemObject实例
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 启动递归统计
    Call CountFolderFiles(fso.GetFolder(targetDir), ws, currentRow)
    
    ' 释放对象资源
    Set fso = Nothing
    Set ws = Nothing
    
    MsgBox "统计完成!结果已写入指定工作表。"
End Sub

' 递归函数:统计单个文件夹及其子文件夹的文件数
Private Sub CountFolderFiles(folderObj As Object, ws As Worksheet, ByRef rowNum As Long)
    Dim subFolder As Object
    
    ' 写入当前文件夹的路径与文件数
    ws.Cells(rowNum, "A").Value = folderObj.Path
    ws.Cells(rowNum, "B").Value = folderObj.Files.Count
    rowNum = rowNum + 1
    
    ' 递归遍历所有子文件夹
    For Each subFolder In folderObj.SubFolders
        Call CountFolderFiles(subFolder, ws, rowNum)
    Next subFolder
    
    Set subFolder = Nothing
End Sub

关键功能说明

  • 递归遍历子文件夹:新增CountFolderFiles私有递归函数,自动遍历目标目录下所有层级的子文件夹,实现全目录深度扫描。
  • 按文件夹维度统计:每个文件夹的完整路径写入A列,对应文件夹内的所有文件总数写入B列,自动向下填充数据。
  • 统计全类型文件:直接调用folderObj.Files.Count,该属性会统计文件夹内所有扩展名的文件,无需额外过滤逻辑。
  • 可选优化项:若想让用户手动选择目标目录,可替换targetDir的赋值代码为以下内容:
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then
            targetDir = .SelectedItems(1) & "\"
        Else
            MsgBox "未选择目录,程序退出。"
            Exit Sub
        End If
    End With
    

内容的提问来源于stack exchange,提问作者Salman Shafi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:40:27