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
相关产品推荐
相关产品推荐

