ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 遍历所有子文件夹枚举指定类型文件或文件夹的函数

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-8-29 10:28 | 显示全部楼层 |阅读模式
本帖最后由 wpxxsyzx 于 2011-9-1 16:13 编辑

论坛最近要求遍历文件夹或文件夹下的文件帖子比较多,每次都要编写一样的查找的代码,把它做成函数,以后方便使用。
有的要求递归遍历所有子文件夹,正好用字典实现。

'MuLu是要查找的文件夹,如:"F:\VBA\pdf\Excel2007VBA"
'LeiXing是要查找的文件类型,如:*.xls,a?*.txt等,如果省略该参数,函数实现的是查找文件夹功能
'LeiXing参数不省略时:1、Zi为true时搜索所有子文件夹下符合要求的文件。2、Zi为false时仅搜索参数MuLu下符合要求的文件
'LeiXing参数省略时:  1、Zi为true时搜索参数MuLu下所有子文件。2、Zi为false时仅搜索参数MuLu下的文件夹
'函数的返回值是一个一维数组,可视具体情况使用

Public Function ListFile(MuLu As String, Zi As Boolean, Optional LeiXing As String = "")
Dim MyFile As String, ms As String
Dim arr, brr, x
Dim i As Integer
Set d = CreateObject("Scripting.Dictionary")
If Left(MuLu, 1) <> "\" Then MuLu = MuLu & "\"
d.Add MuLu, ""
i = 0
Do While i < d.Count
    brr = d.keys
    MyFile = Dir(brr(i), vbDirectory)
    Do While MyFile <> ""
        If MyFile <> "." And MyFile <> ".." Then
            If (GetAttr(brr(i) & MyFile) And vbDirectory) = vbDirectory Then d.Add (brr(i) & MyFile & "\"), ""
        End If
        MyFile = Dir
    Loop
    If Zi = False Then Exit Do
    i = i + 1
Loop
If LeiXing = "" Then
    ListFile = Application.Transpose(d.keys)
Else
    For Each x In d.keys
        MyFile = Dir(x & LeiXing)
        Do While MyFile <> ""
            ms = ms & x & MyFile & ","
            MyFile = Dir
        Loop
        If Zi = False Then Exit For
    Next
    If ms = "" Then ms = "没有符合要求的文件,"
    ListFile = Application.Transpose(Split(ms, ","))
End If
End Function
测试函数:
Public Sub a()
Dim a
a = ListFile("F:\VBA\pdf\Excel2007VBA", True, "*.xls")
Range("a1").Resize(UBound(a), 1) = a
End Sub
枚举文件的函数.rar (12.47 KB, 下载次数: 2049)


评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-8-30 10:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-8-30 13:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-8-31 22:49 | 显示全部楼层
好!!{:soso_e179:}
这种问题以前只想用递归
这种双循环的办法比递归好

TA的精华主题

TA的得分主题

发表于 2011-8-31 22:52 | 显示全部楼层
财富+5怎么成了技术+5了{:soso_e110:}

TA的精华主题

TA的得分主题

发表于 2011-8-31 22:57 | 显示全部楼层
可以尝试命令行中的dir或者for命令,关键语句只需要一句就可以了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-31 23:58 | 显示全部楼层
本帖最后由 wpxxsyzx 于 2011-9-1 00:00 编辑
可以尝试命令行中的dir或者for命令,关键语句只需要一句就可以了。

就是图个在平时使用时方便

TA的精华主题

TA的得分主题

发表于 2011-9-1 07:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
呵呵……感谢楼主分享,下载学习了

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-1 16:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
向各位版主致谢!
希望对有的朋友有帮助。

TA的精华主题

TA的得分主题

发表于 2011-9-7 19:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢分享了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 09:21 , Processed in 0.047083 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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