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的得分主题

发表于 2019-7-15 14:56 | 显示全部楼层
yf_992258 发表于 2009-8-30 11:53
Sub 建立资料目录() '使用双字典,旨在提高速度

Dim MyName, Dic, Did, I, T, F, TT, MyFileName, objSh ...

大神你好,在用这个代码遍历文件夹的过程中,如果某个文件名称含有非Unicode编码的字符时,就会中断报错,如何解决这个问题呢?举个例子,文件名为"制造・客户.xlsx",“・”会在VBA众替换成"?",导致无法读取

TA的精华主题

TA的得分主题

发表于 2021-10-3 15:44 | 显示全部楼层
zldccmx 发表于 2008-9-21 18:18
Sub Test() '使用双字典,旨在提高速度    Dim MyName, Dic, Did, I, T, F, TT, MyFileName ...

试了一下,效果很棒!这个运行时间提示很巧妙!

TA的精华主题

TA的得分主题

发表于 2021-10-9 15:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-3-22 10:35 | 显示全部楼层
yf_992258 发表于 2009-8-28 15:34
添加一段选择文件夹目录的代码即可
Sub Test() '使用双字典,旨在提高速度
    Dim MyName, Dic, Did,  ...

这种DIR加字典感觉速度飞快!

TA的精华主题

TA的得分主题

发表于 2022-10-7 18:47 | 显示全部楼层
本帖最后由 ning84 于 2022-10-8 04:15 编辑
zldccmx 发表于 2008-9-21 00:31
给一个笨笨的办法,使用 DIR!'以查找D:\盘下所有EXCEL文件为例Sub M_dir()'这是一个主模块,中间调用两人子 ...

a.jpg
学习高手的编程思路,重新做一遍题目,获取所有目录名和文件名。


   Dim Dict As Dictionary
关键语句
       Set Dict = New Dictionary
       Dict.Add ("F:\日出日落\"), ""
       oKey = Dict.Keys
       MyName = Dir(oKey(ii), vbDirectory)
         

                If (GetAttr(oKey(ii) & MyName) And vbDirectory) = vbDirectory Then    '如果是次级目录
                     Dict.Add (oKey(ii) & MyName & "\"), ""  '就往字典中添加这个次级目录名作为一个条目
               End If
            End If


  1.    Dim Dict As Dictionary, oDic, oKey
  2.    Dim MyName
  3.    Dim ii
  4.        Set Dict = New Dictionary
  5.        Dict.Add ("F:\日出日落"), ""
  6.        ii = 0
  7.        Do While ii < Dict.Count
  8.           oKey = Dict.Keys
  9.           MyName = Dir(oKey(ii), vbDirectory)
  10.          
  11.           Do While MyName <> ""
  12.             If MyName <> "." And MyName <> ".." Then
  13.                 Debug.Print oKey(ii) & MyName, GetAttr(oKey(ii) & MyName)
  14.                 If (GetAttr(oKey(ii) & MyName) And vbDirectory) = vbDirectory Then    '如果是次级目录
  15.                      Dict.Add (oKey(ii) & MyName & ""), ""  '就往字典中添加这个次级目录名作为一个条目
  16.                End If
  17.             End If
  18.             MyName = Dir    '继续遍历寻找
  19.             'Debug.Print MyName ', Dir
  20.           Loop
  21.           ii = ii + 1
  22.        Loop
复制代码

  1. Sub ll()
  2.    'Dim FullDict As Dictionary
  3.    Dim FileDict As Dictionary
  4.    Dim PathDict As Dictionary
  5.    Dim oDic, oKey
  6.    Dim MyName
  7.    Dim ii
  8.        Set PathDict = New Dictionary
  9.        Set FileDict = New Dictionary
  10.        PathDict.Add ("F:\日出日落\高德地图"), ""
  11.       
  12.        ii = 0
  13.        Do While ii < PathDict.Count
  14.           oKey = PathDict.Keys
  15.           MyName = Dir(oKey(ii), vbDirectory)
  16.          
  17.           Do While MyName <> ""
  18.             If MyName <> "." And MyName <> ".." Then
  19.                 'Debug.Print oKey(ii) & MyName, GetAttr(oKey(ii) & MyName)
  20.                 If (GetAttr(oKey(ii) & MyName) And vbDirectory) = vbDirectory Then    '如果是次级目录
  21.                      PathDict.Add (oKey(ii) & MyName & ""), ""  '就往字典中添加这个次级目录名作为一个条目
  22.                End If
  23.             End If
  24.             MyName = Dir    '继续遍历寻找
  25.             'Debug.Print MyName ', Dir
  26.           Loop
  27.           ii = ii + 1
  28.        Loop
  29.       
  30.        FileDict.Add ("JPG"), ""
  31.        For ii = 0 To PathDict.Count - 1
  32.            oKey = PathDict.Keys(ii)
  33.            MyFileName = Dir(oKey & "*.JPG")
  34.            Do While MyFileName <> ""
  35.               FileDict.Add (oKey & MyFileName), ""
  36.               MyFileName = Dir
  37.            Loop
  38.        Next ii
  39.       
  40.        For ii = 0 To FileDict.Count - 1
  41.            Debug.Print ii, FileDict.Keys(ii)
  42.        Next ii
  43.        For ii = 1 To PathDict.Count - 1
  44.            Debug.Print PathDict.Keys(ii)
  45.        Next ii
  46. End Sub
复制代码



      

Book1.zip

5.5 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2023-9-5 11:33 | 显示全部楼层
yf_992258 发表于 2009-8-28 15:34
添加一段选择文件夹目录的代码即可
Sub Test() '使用双字典,旨在提高速度
    Dim MyName, Dic, Did,  ...

这个要怎么使用呢,复制到Excel宏里面,怎么运行起来呢?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-19 07:40 , Processed in 0.030855 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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