请求修改VBA代码以统计子文件夹内分类文件夹的文件数量
扩展VBA代码:统计次级分类文件夹的文件数量
以下是修改后的代码,可统计父目录下子文件夹及其内部按扩展名分类的次级文件夹的文件数量,并输出到Excel工作表中:
Sub ListSubfoldersWithSubcategories() ' 定义目标父目录路径 Const FolderPath As String = "E:\2022\" ' 初始化文件系统对象 Dim fso As Object: Set fso = CreateObject("Scripting.FileSystemObject") ' 检查目标目录是否存在 If Not fso.FolderExists(FolderPath) Then MsgBox "目录 """ & FolderPath & """不存在。", vbCritical Exit Sub End If Dim parentFolder As Object: Set parentFolder = fso.GetFolder(FolderPath) ' 定位输出的起始单元格(当前工作表最后一行的下一行A列) If ActiveSheet Is Nothing Or Not TypeOf ActiveSheet Is Worksheet Then MsgBox "请确保有可见的工作表处于激活状态。", vbExclamation Exit Sub End If Dim ws As Worksheet: Set ws = ActiveSheet Dim outputCell As Range Set outputCell = ws.Cells(ws.Rows.Count, "A").End(xlUp).Offset(1) ' 写入父目录信息(可选,不需要可注释掉) outputCell.Value = parentFolder.Name outputCell.Offset(, 1).Value = "父目录总文件数" outputCell.Offset(, 2).Value = parentFolder.Files.Count Set outputCell = outputCell.Offset(1) ' 下移一行开始写入子目录信息 ' 遍历所有子文件夹 Dim subFolder As Object For Each subFolder In parentFolder.SubFolders ' 写入子文件夹名称 outputCell.Value = subFolder.Name ' 遍历该子文件夹下的次级分类文件夹 Dim categoryFolder As Object For Each categoryFolder In subFolder.SubFolders outputCell.Offset(, 1).Value = categoryFolder.Name outputCell.Offset(, 2).Value = categoryFolder.Files.Count Set outputCell = outputCell.Offset(1) ' 下移一行处理下一个分类文件夹 Next categoryFolder ' 如果子文件夹下没有次级分类文件夹,也记录文件数 If subFolder.SubFolders.Count = 0 Then outputCell.Offset(, 1).Value = "无分类文件夹" outputCell.Offset(, 2).Value = subFolder.Files.Count Set outputCell = outputCell.Offset(1) End If Next subFolder MsgBox "统计完成!", vbInformation End Sub
代码说明
- 路径配置:修改
FolderPath常量为你的目标父目录路径 - 输出格式:
- A列:子文件夹名称
- B列:次级分类文件夹名称(或“无分类文件夹”)
- C列:对应文件夹内的文件数量
- 容错处理:增加了对无次级分类文件夹的子目录的处理,同时检查工作表激活状态
- 可选部分:父目录信息的写入可以根据需求注释掉,注释后记得调整起始输出位置
内容的提问来源于stack exchange,提问作者Salman Shafi
相关产品推荐
相关产品推荐

