ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA能否“穿透"多层文件夹查找并返回指定类型的文件?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-12-18 18:43 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
首先,非常感谢论坛的帖子帮我解决了部分问题,感谢老朽的耐心回答。原帖为如何提取多个文件下的excel文件名并按顺序排列地址详见http://club.excelhome.net/thread-477259-1-5.html。通过上面这个例子的介绍,我比葫芦画瓢,对代码进行简单修改。用VBA遍历文件夹下的照片(jpg格式)然后把照片名读写在EXCEL文档里,便于后面的工作。(说起来很有成就感,呵呵)
       但是,问题说来就来了。由于工作人员输入不规范,导致照片文件可能存放在多层嵌套文件夹下。比如,有的照片文件在第一层文件夹下面,有的照片文件在第二层文件夹里面(第一层文件夹的子文件夹里面),还有的可能在第五层(文件夹共五层)。而按照上面代码的要求,显然需要录入文件所入最里层的文件夹。
    我的目的是能否改善代码,只需要给出最外层的文件夹(如D:\文件),让VBA代码自动搜索里面的文件夹,如果有下一层的文件夹自动进入搜索查找指定的文件类型返回结果。例如在D:\文件\1\2\3\4\下有一123.jpg文件也能查找并返回到EXCEL表格中(该文件“隐藏”的比较深,文件夹下面嵌套四层)
    不知,VBA能否这么“智能”?也不知问题是否描述清楚。
UB5I_Y{G)UM)SB3IVO`JVIU0.jpg
3){)2J5B_6QU$8RC2D@C(2D0.jpg

TA的精华主题

TA的得分主题

发表于 2010-12-18 19:12 | 显示全部楼层
1、VBA能做到,可以搜索出总文件夹下的所有子文件夹中的文件,
  filesearch:很好用,但2007后不能用
  dir
        FileSystemObject

2、有时,我们也不一定非要VBA这么去做,打开总目录,利用windows自身的探索功能,查找文件 *.jpg  ,很快就全部搜索出来了,全部复制,放入另外一个文件夹,不就解决了

TA的精华主题

TA的得分主题

发表于 2010-12-18 19:54 | 显示全部楼层
文件夹弄个这么多层,很累的呀

TA的精华主题

TA的得分主题

发表于 2010-12-18 21:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Application.FileSearch.SearchFolders = True
查找子文件夹

TA的精华主题

TA的得分主题

发表于 2010-12-18 21:06 | 显示全部楼层
不用文件对象,用递归的办法就可以 搜索论坛 有代码的

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-12-19 13:42 | 显示全部楼层
感谢楼上几位的热心帮忙!学VBA时间不长,但工作上已经受益匪浅,呵呵!再接再厉!
VBA中的FILESEARCH真是个好东东!帮我减少不小的负担。
在网路上搜到这么一段代码,自动提取出某文件夹下指定条件的文件并填写到EXCEL表格中。
《回复2楼》
遍历文件夹的目的是为了对符合条件的文件进行批量重命名。
而4楼所说的递归,现在还比较深奥,暂时还理解不了,呵呵。

网址:http://hi.baidu.com/lpsh1985/blo ... 6661d6d0006079.html
如何用VBA中的FileSearch返回某目录下的文件列表、文件大小及日期?

*******************返回某目录下的文件列表、文件大小及日期**********************************
Sub FileSearch_example()
Dim Myfile As String
Dim r As Long
Sheet1.Columns("A:Z").ClearContents
Myfile = ThisWorkbook.Path & "\"      ‘这个地方可以替换为需要查找的文件路径
r = 1
Cells(r, 1) = "FileName"
Cells(r, 2) = "Size"
Cells(r, 3) = "Date/Time"
Range("A1:C1").Font.Bold = True
r = r + 1
With Application.FileSearch
    .NewSearch
    .LookIn = Myfile
    .Filename = "*.*"     ‘把这个地方改为="*.jpg",即可以查找JPG格式的文件(指定筛选)   
    .SearchSubFolders = true    '  把这个地方变为TRUE,即可搜索子文件夹了,呵呵!   
  .Execute
    For i = 1 To .FoundFiles.Count
       Cells(r, 1) = .FoundFiles(i)
       Cells(r, 2) = FileLen(.FoundFiles(i))
       Cells(r, 3) = FileDateTime(.FoundFiles(i))
       r = r + 1
    Next i
End With
End Sub

'*******************end *********************************************************************

[ 本帖最后由 libaoshui 于 2010-12-19 13:49 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-11-11 15:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-3-2 15:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
做个标记,回头再来看。文件夹多时像快要死机。

TA的精华主题

TA的得分主题

发表于 2012-4-8 15:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
经常用到,学习使用了

TA的精华主题

TA的得分主题

发表于 2013-4-11 08:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
先留下个记号,回头学习下。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 04:19 , Processed in 0.048388 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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