ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] [求助]如何用VBA遍历指定目录下的所有子文件夹和文件

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-6-30 19:48 | 显示全部楼层
好贴,好好学习,最好能与文件建立联系(或用超级链接,或用HYPERLINK函数)这样使用就方便了!

TA的精华主题

TA的得分主题

发表于 2009-7-29 23:00 | 显示全部楼层

回复 5楼 zldccmx 的帖子

这段程序大部分时间都是可以顺利运行的,时间也很少,2K多次的运算最多不会超过1分钟。
但是有时候程序会报“文件找不到”的错误 (run time error 53),  或者出现 “文件名或文件号错误) (run time error 52) . 有谁知道这是什么原因吗?
所有文件都可以访问,而且我有一次测试中跑了9K多次(文件很多),那次没出什么问题。是不是跟有些文件的类型有关啊?

TA的精华主题

TA的得分主题

发表于 2009-7-30 22:35 | 显示全部楼层

回复 13楼 chieson 的帖子

知道什么错误了
run time error 53 : 是因为下面的文件名个别包含双拼或全拼等中文输入法输入的英文或符号。
run time error 52: 是因为个别文件名直接包含了中文

难道dir取文件名时,如果是中文时就会产生?等符号以至出错? (公司的电脑都是用英文的,难道跟系统设置有关?)
但是用段程序在家里的电脑上跑过,结果有时有中文字符时也没有出错。

TA的精华主题

TA的得分主题

发表于 2009-7-30 23:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我还没有发现问题。
估计是与操作系统有关。
我没有用过英文操作系统,所以没有办法测试

TA的精华主题

TA的得分主题

发表于 2009-8-28 14:52 | 显示全部楼层

回复 5楼 zldccmx 的帖子

这个程序对于建立某文件夹下的所有文件文件目录很有实用价值.若修改为运行程序时由用户自由选择建立某盘下的某文件夹(包含多级子文件夹)内所有文件目录,这就太好了.我是个菜鸟,不知道怎么改.烦哪位大侠帮帮.

TA的精华主题

TA的得分主题

发表于 2009-8-28 15:30 | 显示全部楼层
是对出现 “文件名或文件号“错误
我看了我有一个坛内下载的文件,ʹ ض.rar___200672519564957236.rar
不能识别所以出错了
还有字典+数组比前一种DIR快了没多少,估计数据量大了可能感觉的出来

TA的精华主题

TA的得分主题

发表于 2009-8-28 15:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个程序对于建立某文件夹下的所有文件文件目录很有实用价值.若修改为运行程序时由用户自由选择建立某盘下的某文件夹(包含多级子文件夹)内所有文件目录,这就太好了.我是个菜鸟,不知道怎么改.烦哪位大侠帮帮.

添加一段选择文件夹目录的代码即可
Sub Test() '使用双字典,旨在提高速度
    Dim MyName, Dic, Did, I, T, F, TT, MyFileName
    'On Error Resume Next
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(0, "选择文件夹", 0, 0)
    If Not objFolder Is Nothing Then lj = objFolder.self.Path & "\"
    Set objFolder = Nothing
    Set objShell = Nothing

   
    T = Timer
    Set Dic = CreateObject("Scripting.Dictionary")    '创建一个字典对象
    Set Did = CreateObject("Scripting.Dictionary")
    Dic.Add (lj), ""
    I = 0
    Do While I < Dic.Count
        Ke = Dic.keys   '开始遍历字典
        MyName = Dir(Ke(I), vbDirectory)    '查找目录
        Do While MyName <> ""
            If MyName <> "." And MyName <> ".." Then
                If (GetAttr(Ke(I) & MyName) And vbDirectory) = vbDirectory Then    '如果是次级目录
                    Dic.Add (Ke(I) & MyName & "\"), ""  '就往字典中添加这个次级目录名作为一个条目
                End If
            End If
            MyName = Dir    '继续遍历寻找
        Loop
        I = I + 1
    Loop
    Did.Add ("文件清单"), ""    '以查找D盘下所有EXCEL文件为例
    For Each Ke In Dic.keys
        MyFileName = Dir(Ke & "*.xls")
        Do While MyFileName <> ""
            Did.Add (Ke & MyFileName), ""
            MyFileName = Dir
        Loop
    Next
    For Each Sh In ThisWorkbook.Worksheets
        If Sh.Name = "XLS文件清单" Then
            Sheets("XLS文件清单").Cells.Delete
            F = True
            Exit For
        Else
            F = False
        End If
    Next
    If Not F Then
        Sheets.Add.Name = "XLS文件清单"
    End If
    Sheets("XLS文件清单").[A1].Resize(Did.Count, 1) = WorksheetFunction.Transpose(Did.keys)
    TT = Timer - T
    MsgBox TT 'Minute(TT) & "分" & Second(TT) & "秒"
End Sub

TA的精华主题

TA的得分主题

发表于 2009-8-28 16:23 | 显示全部楼层

回复 18楼 yf_992258 的帖子

太好了,十分感谢,把这句稍改了下MyFileName = Dir(Ke & "*.*")
就能建立文件夹下所有文件目录了,对建立资料档案非常实用.

TA的精华主题

TA的得分主题

发表于 2009-8-28 16:48 | 显示全部楼层

回复 18楼 yf_992258 的帖子

再请教大灰狼大师一个问题,如何让程序运行后,在A1单元格以及本工作表名称显示为所选择一级文件夹的名称&"文件清单"?如选择的文件夹名称为"2009年农业资料1",则A1和工作表名称为"2009年农业资料1文件清单",麻烦大师了.

[ 本帖最后由 xfliuliu2710 于 2009-8-28 16:56 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-8-28 17:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
老朽很厉害啊!支持!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-2 23:56 , Processed in 0.041253 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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