ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 文件夹遍历

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-3-3 08:05 | 显示全部楼层 |阅读模式

TA的精华主题

TA的得分主题

发表于 2024-3-3 08:08 | 显示全部楼层
应该不用搞这么复杂吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-3 08:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ykcbf1100 发表于 2024-3-3 08:08
应该不用搞这么复杂吧

有看到过用集合的不过我不会用哈哈

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-3 08:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-3-3 08:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ArrayList和Collection可以,数组也行。
用ArrayList的话要office2007版以上才可以。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-3 08:59 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-3 12:36 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-3 12:44 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-3 13:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
20240303_130732.jpg 20240303_130741.jpg 1.gif

TA的精华主题

TA的得分主题

发表于 2024-3-3 13:48 | 显示全部楼层
https://club.excelhome.net/thread-1409141-1-1.html

QQ截图20240303134717.png
  1. '*******************************************************************************************************
  2. '功能:    查找指定文件夹含子文件夹内所有文件名或文件夹名(含路径)
  3. '函数名:  FileAllArr
  4. '参数1:   Filename    需查找的文件夹名,不包含文件名
  5. '参数2:   FileFilter  需要过滤的文件名,可省略,默认为:[*.*]
  6. '参数3:   Liwai       剔除例外的文件名,可省略,默认为:空,一般为:ThisWorkbook.Name
  7. '参数4:   SubFiles    是否需要查找子文件夹内文件,可省略,默认为:true
  8. '参数5:   Files       是否只要文件夹名,可省略,默认为:FALSE
  9. '返回值:  一个字符型的数组
  10. '使用方法:FileArr = FileAllArr(ThisWorkbook.Path, "*.xls", ThisWorkbook.Name,false,false)
  11. '作者:    北极狐工作室 QQ:14885553
  12. '*******************************************************************************************************
  13. Public Function FileAllArr(ByVal Filename As String, Optional ByVal FileFilter As String = "*.*", Optional ByVal Liwai As String = "", Optional ByVal SubFiles As Boolean = True, Optional ByVal Files As Boolean = False) As String()
  14.    
  15.     Dim DIC, DID, Ke, MyName, MyFileName
  16.     Dim I As Long
  17.    
  18.     Set DIC = CreateObject("Scripting.Dictionary")    '创建一个字典对象
  19.     Set DID = CreateObject("Scripting.Dictionary")
  20.    
  21.     Rem 如果文件夹路径 最后不是:[\] 则补充上去
  22.     If Mid(Filename, Len(Filename), 1) <> "" Then
  23.         Filename = Filename & ""
  24.     End If
  25.    
  26.     DIC.Add (Filename), ""
  27.     I = 0
  28.     Do While I < DIC.Count
  29.         Ke = DIC.keys   '开始遍历字典
  30.         If SubFiles = True Then  '//如果需要查找子文件夹
  31.             MyName = Dir(Ke(I), vbDirectory)    '查找目录
  32.             Do While MyName <> ""
  33.                 If MyName <> "." And MyName <> ".." Then
  34.                     If (GetAttr(Ke(I) & MyName) And vbDirectory) = vbDirectory Then    '如果是次级目录
  35.                         DIC.Add (Ke(I) & MyName & ""), ""  '就往字典中添加这个次级目录名作为一个条目
  36.                     End If
  37.                 End If
  38.                 MyName = Dir    '继续遍历寻找
  39.             Loop
  40.         End If
  41.         I = I + 1
  42.     Loop
  43.     Dim arrx() As String
  44.     I = 0
  45.     ReDim arrx(I)
  46.     arrx(I) = ""
  47.     If Files = True Then   '//是否只输出文件夹名
  48.         
  49.         For Each Ke In DIC.keys '以查找总表所在文件夹下所有excel文件为例
  50.             ReDim Preserve arrx(I)
  51.             If Ke <> Filename Then   '//自身文件夹除外
  52.                 arrx(I) = Ke
  53.                 I = I + 1
  54.             End If
  55.         Next
  56.         FileAllArr = arrx
  57.     Else
  58.         For Each Ke In DIC.keys '以查找总表所在文件夹下所有excel文件为例
  59.             MyFileName = Dir(Ke & FileFilter) '过滤器:EXCEL2003为:*.xls,excel2007为:*.xlsx
  60.             Do While MyFileName <> ""
  61.                 If MyFileName <> Liwai Then '排除例外文件
  62.                     ReDim Preserve arrx(I)
  63.                     arrx(I) = Ke & MyFileName
  64.                     I = I + 1
  65.                 End If
  66.                 MyFileName = Dir
  67.             Loop
  68.         Next
  69.         FileAllArr = arrx
  70.     End If
  71. End Function
复制代码


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-3 14:16 , Processed in 0.050654 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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