ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] fso提取汇总文件夹及其下的文件名及内容(递归操作字典汇总)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2019-12-31 16:15 | 显示全部楼层
本帖已被收录到知识树中,索引项:文件操作和FSO
本帖最后由 考试加油站 于 2019-12-31 16:19 编辑
liulang0808 发表于 2019-12-31 12:57
超级链接,录制一段宏,然后修改即可
修改文件名使用name as,在另外一个帖子有说明

谢谢,能在你的这个上面加上一个详细代码吗 四、遍历当前文件夹及所有子文件夹下的文件.zip (63.6 KB, 下载次数: 21)

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-31 18:32 | 显示全部楼层
考试加油站 发表于 2019-12-31 16:15
谢谢,能在你的这个上面加上一个详细代码吗

Sub °′Å¥1_Click()
    Application.ScreenUpdating = False
    ActiveSheet.UsedRange.ClearContents
    Cells(1, 1) = "Ïà¶Ô·¾¶ÎļtÃû"
    Cells(1, 2) = "¾ø¶Ô·¾¶ÎļtÃû"
    Getfd (ThisWorkbook.Path) 'ThisWorkbook.PathêÇμ±Ç°′úÂëÎļtËùÔú·¾¶£¬Â·¾¶Ãû¿éòÔ¸ù¾YDèÇóDT¸Ä
    Application.ScreenUpdating = True
End Sub
Sub Getfd(ByVal pth)
    Set Fso = CreateObject("scripting.filesystemobject")
    Set ff = Fso.getfolder(pth)
    For Each f In ff.Files
        Rem ¾ßìåìáè¡ÄÄààÎļt£¬»1êÇDèòa¸ù¾YÎļtà©Õ1Ãû½øDD′|àí
'        Cells(Rows.Count, 1).End(3).Offset(1) = f.Name
        ActiveSheet.Hyperlinks.Add Anchor:=Cells(Rows.Count, 1).End(3).Offset(1), Address:=f, TextToDisplay:=f.Name
        Cells(Rows.Count, 2).End(3).Offset(1) = f
    Next f
    For Each fd In ff.subfolders
        Getfd (fd)
    Next fd
End Sub
文件改名,使用name as另外的帖子有,自己看吧

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-1-7 14:13 | 显示全部楼层
老师,请问这个遍历支持.xlsm类型的文件吗

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-8 18:21 | 显示全部楼层
zhoubocz 发表于 2020-1-7 14:13
老师,请问这个遍历支持.xlsm类型的文件吗

支持,可以测试看看的

TA的精华主题

TA的得分主题

发表于 2020-1-9 15:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
先收藏下,有时间看

TA的精华主题

TA的得分主题

发表于 2020-2-14 14:53 | 显示全部楼层
非常有用的资料 帮了大忙啦~~~

TA的精华主题

TA的得分主题

发表于 2020-2-14 19:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢分享对对对对对对

TA的精华主题

TA的得分主题

发表于 2020-2-28 22:26 | 显示全部楼层
五、汇总当前文件夹及子文件夹下所有excel文件内容
这个代码用的的字典,好处是数据合并是进行了运算.缺点是只能合并两列.

对于有将文件夹下所有EXCEL sheet下的内容合并到一个sheet需求时,做了部分修改。
Public d
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    ActiveSheet.UsedRange.ClearContents
    Cells(1, 1) = "编号"
    Cells(1, 2) = "数量"
    Set d = CreateObject("scripting.dictionary")
    Getfd (ThisWorkbook.path) 'ThisWorkbook.Path是当前代码文件所在路径,路径名可以根据需求修改
    Application.ScreenUpdating = True
    'If d.Count > 0 Then
        'ThisWorkbook.Sheets(1).[a2].Resize(d.Count) = WorksheetFunction.Transpose(d.keys) '如果D.COUNT >65536,就需要调整,不能使用Transpose,因为Transpose 只支持65536以内数据
        'ThisWorkbook.Sheets(1).[b2].Resize(d.Count) = WorksheetFunction.Transpose(d.items)
    'End If
    'd.RemoveAll
End Sub
Sub Getfd(ByVal pth)

    Set Fso = CreateObject("scripting.filesystemobject")
    Set ff = Fso.getfolder(pth)
    For Each f In ff.Files   '文件夹下的所有文件,除了文件夹
        Rem 具体提取哪类文件,还是需要根据文件扩展名进行处理
        If InStr(Split(f.Name, ".")(UBound(Split(f.Name, "."))), "xl") > 0 Then   '判断是否为xlms文件 。
            If InStr(f.Name, ThisWorkbook.Name) = 0 Then   '文件中不包括当前excel
                Set wb = Workbooks.Open(f)
                For Each sht In wb.Sheets            'sheets中的每个sheet
                    If WorksheetFunction.CountA(sht.UsedRange) > 1 Then
                        aa = ThisWorkbook.ActiveSheet.Range("A65536").End(xlUp).Row + 1 'aa是便于将内容依次复制到当前sheet
                        sht.UsedRange.Copy ThisWorkbook.ActiveSheet.Cells(aa, 1) '将sht内容复制到当前sheet
                    End If
                Next sht
                wb.Close False
            End If
        End If
    Next f
    For Each fd In ff.subfolders  '遍历文件夹下的所有子文件夹
        Getfd (fd)
    Next fd
End Sub

TA的精华主题

TA的得分主题

发表于 2020-3-7 08:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
收藏备用汇总!

TA的精华主题

TA的得分主题

发表于 2020-3-22 16:44 | 显示全部楼层
小飞龙x'x'x 发表于 2020-2-28 22:26
五、汇总当前文件夹及子文件夹下所有excel文件内容
这个代码用的的字典,好处是数据合并是进行了运算.缺点 ...

你好!如果第四个,我想要对当前文件夹的所有子文件夹进行处理(不含当前文件夹),该怎么改这个代码?谢谢!

四、遍历当前文件夹及所有子文件夹下的文件
还是递归

Sub 按钮1_Click()
    Application.ScreenUpdating = False
    ActiveSheet.UsedRange.ClearContents
    Cells(1, 1) = "相对路径文件名"
    Cells(1, 2) = "绝对路径文件名"
    Getfd (ThisWorkbook.Path) 'ThisWorkbook.Path是当前代码文件所在路径,路径名可以根据需求修改
    Application.ScreenUpdating = True
End Sub
Sub Getfd(ByVal pth)
    Set Fso = CreateObject("scripting.filesystemobject")
    Set ff = Fso.getfolder(pth)
    For Each f In ff.Files
        Rem 具体提取哪类文件,还是需要根据文件扩展名进行处理
        Cells(Rows.Count, 1).End(3).Offset(1) = f.Name
        Cells(Rows.Count, 2).End(3).Offset(1) = f
    Next f
    For Each fd In ff.subfolders
        Getfd (fd)
    Next fd
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-11 05:37 , Processed in 1.057781 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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