ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2010-11-22 22:21 | 显示全部楼层
自己也写过类似的在2007版下遍历文件夹提取文件名的代码,用的是递归的方法,写法就相对简单一点,不过可能资源消耗会比较大。
  1. Option Explicit

  2. Sub Test()
  3. Dim iPath As String, i As Long

  4.     With Application.FileDialog(msoFileDialogFolderPicker)
  5.         .Title = "请选择要查找的文件夹"
  6.         If .Show Then
  7.             iPath = .SelectedItems(1)
  8.         End If
  9.     End With
  10.    
  11.     If iPath = "False" Or Len(iPath) = 0 Then Exit Sub
  12.    
  13.     i = 1
  14.     Call GetFolderFile(iPath, i)
  15.     MsgBox "文件名链接获取完毕。", vbOKOnly, "提示"

  16. End Sub

  17. Private Sub GetFolderFile(ByVal nPath As String, ByRef iCount As Long)
  18. Dim iFileSys As New FileSystemObject
  19. Dim iFile As Files, gFile As File
  20. Dim iFolder As Folder, sFolder As Folders, nFolder As Folder

  21.     Set iFolder = iFileSys.GetFolder(nPath)
  22.     Set sFolder = iFolder.SubFolders
  23.     Set iFile = iFolder.Files

  24.     With ActiveSheet
  25.         For Each gFile In iFile
  26.             .Hyperlinks.Add anchor:=.Cells(iCount, 1), Address:=gFile.Path, TextToDisplay:=gFile.Name
  27.             iCount = iCount + 1
  28.         Next
  29.     End With
  30.    
  31.     '递归遍历所有子文件夹
  32.     For Each nFolder In sFolder
  33.         Call GetFolderFile(nFolder.Path, iCount)
  34.     Next
  35. End Sub
复制代码

[ 本帖最后由 chentx 于 2010-11-22 22:28 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-11-23 11:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

回复 71楼 chentx 的帖子

相当漂亮,学习了

TA的精华主题

TA的得分主题

发表于 2010-12-21 22:46 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-12-29 10:26 | 显示全部楼层
不知道不灰狼老师还在不在关注这个问题?
有一事还需请教!
如何把生成的清单放在我指定的工作表内!比如放在sheet6的C列,另想增加一按钮,做一个有即时更新的功能

TA的精华主题

TA的得分主题

发表于 2011-1-6 10:26 | 显示全部楼层
就是找到对应表,对应行列回填数据吗?
那必须告知什么清单到什么表,什么行列
最好上附件

TA的精华主题

TA的得分主题

发表于 2011-2-25 22:55 | 显示全部楼层
请问【老朽&大灰狼】老师,如何加多一句来判断:
①一开始已经找到了50个文件
②第二次,我在文件夹下新增了20个文件
③请问:如何在已汇总的50个文件名下,直接增加20个新文件的文件名呢?
我想的是:把统计过的表名字记录下来,下次再统计判断一下是否统计过,已经统计过的就跳过去

可是怎么书写呢?
请问请问~~~

[ 本帖最后由 lingzhen123456 于 2011-2-25 22:57 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-3-18 08:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 zldccmx 于 2008-9-21 18:18 发表
Sub Test() '使用双字典,旨在提高速度    Dim MyName, Dic, Did, I, T, F, TT, MyFileName    T = Time    Set Dic = CreateObject("Scripting.Dictionary") &n ...



     MyName = Dir(Ke(I), vbDirectory)    '查找目录

5楼的代码,我的在执行到这里的时候,出问题了,不知道什么原因哦

[ 本帖最后由 mengshu 于 2011-3-18 08:51 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-5-16 11:45 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-5-16 14:09 | 显示全部楼层

回复 3楼 zldccmx 的帖子

不知道高高高,高手的老朽老师还关注这个问题不?我想实现在可以自由选取文件夹,遍历子文件夹的前提下,(我有三万多个格式完全相同的工作薄,每个工作薄里有八张工作表,每个工作表有很多信息),我想提取第一张表中的b2单元格(姓名),d3(村组),第二张表中的c3(等级),f5(金额),把这些东西提取后,在另一个excel中从b列开始依次填入提取的数据,每一行即为提取一个工作薄内容的记录,依次排下来,做成一个目录的形式。不知道我是不是和一年级的学生,问清楚了没有?望得到完整代码解答。

[ 本帖最后由 liumongshi 于 2011-5-16 14:12 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-5-17 15:08 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 05:25 , Processed in 0.044794 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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