ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 202|回复: 1

如何判断有几级子目录。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-8 19:46 | 显示全部楼层 |阅读模式
本帖最后由 ning84 于 2024-4-8 21:13 编辑

现在采用的方法SubFolders-----------Count
遍历子目录。需要人为定义几级子目录。



  1. Sub TraverseFolderToSheet()
  2.     Dim Fso As New FileSystemObject
  3.     Dim oFolder As Folder
  4.     Dim Arr, Arr1, Arr2
  5.         Set Fso = New FileSystemObject
  6.    
  7.         Arr = TraverseFolderArr(Fso.GetFolder(ThisWorkbook.Path))
  8.         For ii = 0 To UBound(Arr)
  9.             Set oFolder = Arr(ii)
  10.             Debug.Print oFolder.Name
  11.         Next ii
  12.         Stop
  13.         
  14. End Sub



  15. Function TraverseFolderArr(mFolder As Folder)
  16.     Dim oFolder As Folder, oFolders As Folders
  17.         Set oFolders = mFolder.SubFolders
  18.     Dim Arr() As Folder
  19.         ReDim Arr(oFolders.Count - 1) As Folder
  20.     Dim ii As Integer
  21.         For Each oFolder In oFolders
  22.               Set Arr(ii) = oFolder
  23.               ii = ii + 1
  24.         Next oFolder
  25.         TraverseFolderArr = Arr
  26. End Function


  27. Function TraverseFolderDict(mFolder As Folder, Dict As Dictionary)
  28.     Dim oFolder As Folder, oFolders As Folders
  29.         Set oFolders = mFolder.SubFolders
  30.    
  31.         For Each oFolder In oFolders
  32.               
  33.               Dict(oFolder.Path) = ""
  34.               Set Dict = TraverseFolderDict(oFolder, Dict)
  35.         Next oFolder
  36.         Set TraverseFolderDict = Dict
  37.         'Stop
  38.         
  39. End Function

  40. Sub DictTraverseFolder()
  41.     Dim Sht As Worksheet
  42.         Set Sht = Sheet1
  43.         With Sht.Cells
  44.             .Clear
  45.             .Font.Size = 9
  46.         End With
  47.     Dim Fso As New FileSystemObject
  48.     Dim oFolder As Folder
  49.     Dim Arr, Arr1, Arr2
  50.     Dim Dict As Dictionary
  51.     Dim Rr As Integer
  52.         Rr = 10
  53.    
  54.         Set Dict = New Dictionary
  55.         Set Fso = New FileSystemObject
  56.    
  57.         Set Dict = TraverseFolderDict(Fso.GetFolder(ThisWorkbook.Path), Dict)
  58.         ''
  59.         For ii = 0 To Dict.Count - 1
  60.              Debug.Print ii, Dict.Keys(ii)
  61.              With Sht
  62.                    .Cells(Rr + ii, 1) = ii
  63.                    .Cells(Rr + ii, 2) = Dict.Keys(ii)
  64.                    Set oFolder = Fso.GetFolder(.Cells(Rr + ii, 2))
  65.                    .Cells(Rr, 3) = oFolder.SubFolders.Count
  66.              End With
  67.             
  68.         Next ii
  69.         
  70. End Sub

复制代码

TA的精华主题

TA的得分主题

发表于 2024-4-8 21:12 | 显示全部楼层
可以递归遍历啊,不用人为定义几级子目录
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-28 03:29 , Processed in 0.033197 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表