ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求VBA遍历子文件夹代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-4-23 17:32 | 显示全部楼层 |阅读模式
我有一个文件夹,该文件夹内有三个子文件夹,每个子文件夹下又有若干个子子文件夹,而且会根据工作进度不断增加。我想在文件夹下放置一个Excel文件,运行宏时自动列出各子文件夹及子文件夹下的子子文件夹。求高手给个代码!(注:我原有的文件夹不在根目录下。)

TA的精华主题

TA的得分主题

发表于 2014-4-23 18:43 | 显示全部楼层
cbtaja 发表于 2014-4-23 18:16
使用命令行tree命令,方法如下,供参考:

假如要遍历显示D:\的子目录,可在“开始”——“运行”中输入并 ...

你这个不好处理,我认为用 dir 好

TA的精华主题

TA的得分主题

发表于 2014-4-23 17:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
以前有在这里下载过《制作链接文件目录.xls》,这东东适合你的需求。

制作链接文件目录.rar

34.34 KB, 下载次数: 220

点评

此方法不再适合07及以上版本OFFICE  发表于 2014-4-23 18:51

TA的精华主题

TA的得分主题

发表于 2014-4-23 18:16 | 显示全部楼层
使用命令行tree命令,方法如下,供参考:

假如要遍历显示D:\的子目录,可在“开始”——“运行”中输入并回车:
  1. tree d:\ > c:\aaaa.txt
复制代码
则结果在C:\aaaa.txt中列出了所有子目录

TA的精华主题

TA的得分主题

发表于 2014-4-23 18:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
xmtutoo 发表于 2014-4-23 17:51
以前有在这里下载过《制作链接文件目录.xls》,这东东适合你的需求。

非常给力,谢谢分享!!!!!!

TA的精华主题

TA的得分主题

发表于 2014-4-23 18:54 | 显示全部楼层
自己百度一下,FSO SUBFOLDERS 递归

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-24 09:00 | 显示全部楼层
是不是我没表达清楚啊?我只想知道子文件夹的名字以及子文件夹包含的文件夹名字,至于里面有什么文件我不需要知道的

TA的精华主题

TA的得分主题

发表于 2014-4-24 09:04 | 显示全部楼层
遍历文件夹 百度一把一把的啊
随便给你一个
核心函数如下
  1. '-----------Sub GetFiles----------Copyright@百度不到去谷歌 QQ80871835 2014/3/10---------------------------
  2. '功能 :'遍历path目录,返回所有文件名数组,fullname参数可选是否返回完整路径
  3. '变量 :path      string  -文件夹路径
  4. '      Fullname  Boolean -是否返回完整路径,默认为true返回完整
  5. '--------------------------------------------------------------------------------------------------
  6. Function GetFiles(path$, Optional Fullname As Boolean = True)
  7.     Dim dic As Object
  8.     Set dic = CreateObject("Scripting.Dictionary")
  9.     Dim Fso As Object, Folder As Object
  10.     Set Fso = CreateObject("Scripting.FileSystemObject")
  11.     Set Folder = Fso.GetFolder(path)
  12.     i = 1
  13.     Call aGetFile(Folder, dic)
  14.     If Fullname Then
  15.         GetFiles = dic.keys '返回文件名
  16.     Else
  17.         GetFiles = dic.items '返回完整路径带文件名
  18.     End If
  19.     Set Folder = Nothing
  20.     Set Fso = Nothing
  21.     MsgBox "ok"
  22. End Function
  23. Sub aGetFile(ByVal Folder As Object, dic)
  24.     Dim SubFolder As Object
  25.     Dim File As Object
  26.     For Each File In Folder.Files '遍历文件
  27.         dic.Add File.path & "" & Filename, File.Name
  28.     Next
  29.     For Each SubFolder In Folder.SubFolders
  30.         Call aGetFile(SubFolder, dic) '递归调用子文件夹
  31.     Next
  32. End Sub
复制代码

示范文件 VBA-返回文件夹及子文件夹文件数组--通用函数.rar (36.97 KB, 下载次数: 203)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-24 09:22 | 显示全部楼层
楼上给你的太高端了,初学者玩不转啊!
帮我看看我变的这个:
Sub wenjiajia()
Dim s As String
Dim dangqian As String
Dim n As Integer
dangqian = Dir(ThisWorkbook.Path, 16)
Do Until dangqian = ""
If dangqian Like "*.*" Then
Else
s = s & Chr(13) & dangqian
End If
dangqian = Dir
Loop
MsgBox s
End Sub
我把这个放到E盘根目录下时能统计E盘根目录下的文件夹名称,但是我把它复制到E盘下的一个文件夹中时,它就不能返回这个文件夹中的子文件夹了。问题出在哪?

TA的精华主题

TA的得分主题

发表于 2014-4-24 09:40 | 显示全部楼层
本帖最后由 百度不到去谷歌 于 2014-4-25 09:54 编辑

你这个不行的 我的改一下就可以了
你只需要复制我的代码 然后调用的地方
dim arr
arr=GetFiles(thisworkbook.path,0 , "fo")'arr就是所有文件夹及子文件夹的名称数组
  1. '-----------Sub GetFiles----------Copyright@百度不到去谷歌 QQ80871835 2014/3/10---------------------------
  2. '功能 :'遍历path目录,返回所有文件名或者文件夹名数组,fullname参数可选是否返回完整路径
  3. '变量 :path      string  -文件夹路径
  4. '      Fullname  Boolean -是否返回完整路径,默认为true返回完整
  5. '      ftype     string  -返回文件还是文件夹,f为文件,fo为文件夹
  6. '--------------------------------------------------------------------------------------------------
  7. Function GetFiles(path$, Optional Fullname As Boolean = True, Optional ftype = "f")
  8.     Dim dic As Object, i&
  9.     Set dic = CreateObject("Scripting.Dictionary")
  10.     Dim Fso As Object, Folder As Object
  11.     Set Fso = CreateObject("Scripting.FileSystemObject")
  12.     Set Folder = Fso.GetFolder(path)
  13.     i = 1
  14.     Call aGetFile(Folder, dic, ftype)
  15.     If Fullname Then
  16.         GetFiles = dic.keys '返回文件名
  17.     Else
  18.         GetFiles = dic.items '返回完整路径带文件名
  19.     End If
  20.     Set Folder = Nothing
  21.     Set Fso = Nothing
  22.     MsgBox "ok"
  23. End Function
  24. Sub aGetFile(ByVal Folder As Object, dic, Optional ftype = "f")
  25.     Dim SubFolder As Object
  26.     Dim File As Object
  27.     If ftype = "fo" Then
  28.         For Each SubFolder In Folder.SubFolders
  29.             dic.Add SubFolder.path, SubFolder.Name
  30.             Call aGetFile(SubFolder, dic, ftype)   '递归调用子文件夹
  31.         Next
  32.     Else '遍历文件
  33.         For Each File In Folder.Files    '遍历文件
  34.             dic.Add File.path & "" & File.Name, File.Name
  35.         Next
  36.         For Each SubFolder In Folder.SubFolders
  37.             Call aGetFile(SubFolder, dic, ftype)   '递归调用子文件夹
  38.         Next
  39.     End If
  40. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-19 06:08 , Processed in 0.050987 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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