ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 用vba 如何处理当前目录(包括子文件夹)中特定后缀的文件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-3-14 14:55 | 显示全部楼层 |阅读模式
本帖最后由 wtujcf123 于 2021-3-15 23:15 编辑

各位老师好,我在网上找到了这代码,这个代码可以处理当前当前目录(包括子文件夹)中的所有文件,但不能筛选出特定后缀名的文件进行处理,请问该如何修改代码呢,谢谢各位老师帮忙,我自己测试了许久,也不知道该怎么弄。




  1. Sub 批量处理文件及子目录()

  2. Dim startfolder As String
  3. startfolder = "D:\新建文件夹" '指定文件夹
  4. Set folderlist = CreateObject("scripting.dictionary")
  5. Set filelist = CreateObject("scripting.dictionary")
  6. i = 1
  7. folderlist.Add startfolder, ""
  8. Do While folderlist.count > 0
  9. For Each FolderName In folderlist.keys
  10. fname = Dir(FolderName, vbDirectory)
  11. Do While fname <> ""
  12. If fname <> ".." And fname <> "." Then
  13. If GetAttr(FolderName & fname) And vbDirectory Then
  14. folderlist.Add FolderName & fname & "", ""
  15. Else
  16. Documents.Open FileName:=FolderName & fname '打开文件
  17. ActiveDocument.Save '保存文件
  18. ActiveDocument.Close '关闭文件
  19. End If
  20. End If
  21. fname = Dir
  22. Loop
  23. folderlist.Remove (FolderName)
  24. Next
  25. Loop

  26. MsgBox "完成"


  27. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2021-3-14 15:57 | 显示全部楼层
判断一下,这个变量的后缀即可
fname

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-3-14 16:03 | 显示全部楼层
本帖最后由 wtujcf123 于 2021-3-14 16:20 编辑
3190496160 发表于 2021-3-14 15:57
判断一下,这个变量的后缀即可
fname

老师,能帮写一下吗?实在不知道怎么写

TA的精华主题

TA的得分主题

发表于 2021-3-15 10:56 | 显示全部楼层
感谢分享,论坛因你而精彩!



                                            藏起来的小尾巴,不让你看!  

    TA的精华主题

    TA的得分主题

    发表于 2021-3-15 12:09 | 显示全部楼层

    Sub 批量处理文件及子目录()

    Dim startfolder As String
    startfolder = "D:\新建文件夹" '指定文件夹
    Set folderlist = CreateObject("scripting.dictionary")
    Set filelist = CreateObject("scripting.dictionary")
    i = 1
    kzm = ".doc"
    folderlist.Add startfolder, ""
    Do While folderlist.Count > 0
        For Each FolderName In folderlist.keys
            fname = Dir(FolderName, vbDirectory)
            Do While fname <> ""
                If fname <> ".." And fname <> "." Then
                    If GetAttr(FolderName & fname) And vbDirectory Then
                        folderlist.Add FolderName & fname & "", ""
                    Else
                        If LCase(Right(fname, Len(kzm))) = kzm Then
                        Documents.Open Filename:=FolderName & fname '打开文件
                        ActiveDocument.Save '保存文件
                        ActiveDocument.Close '关闭文件
                        End If
                    End If
                End If
                fname = Dir
            Loop
            folderlist.Remove (FolderName)
        Next
    Loop

    MsgBox "完成"


    End Sub
    看看是否合适吧

    TA的精华主题

    TA的得分主题

     楼主| 发表于 2021-3-15 18:48 | 显示全部楼层
    [广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
    liulang0808 发表于 2021-3-15 12:09
    Sub 批量处理文件及子目录()

    Dim startfolder As String

    谢谢版主,不知道是不是我原先的程序有问题,经测试,如果.kzm = ".doc"不能找到文件,提示这一行代码 有问题。If GetAttr(FolderName & fname) And vbDirectory Then image.png

    但如果是.kzm = ".docx",则可以找到一个文件,但随后也会提示和上面一样的问题,是不是这个程序,现在不能找到子目录里的文件呢?

    我的D:\新建文件夹\里有一个.docx 的文件,且子目录里也有一个.docx的文件。


    劳烦版主再费点心了。

    TA的精华主题

    TA的得分主题

    发表于 2021-3-15 20:05 | 显示全部楼层
    [广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
    wtujcf123 发表于 2021-3-15 18:48
    谢谢版主,不知道是不是我原先的程序有问题,经测试,如果.kzm = ".doc"不能找到文件,提示这一行代码 有 ...

    folderlist.Add FolderName & fname & "\", ""
    代码里 文件路径分隔符没有显示处理,这次看看吧

    评分

    1

    查看全部评分

    TA的精华主题

    TA的得分主题

     楼主| 发表于 2021-3-15 21:10 | 显示全部楼层
    [广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
    本帖最后由 wtujcf123 于 2021-3-15 22:23 编辑
    liulang0808 发表于 2021-3-15 20:05
    folderlist.Add FolderName & fname & "\", ""
    代码里 文件路径分隔符没有显示处理,这次看看吧

    谢谢版主,经测试已经可以了。完整的代码就不贴了"\"会被吞。提示一下:startfolder 里的路径也还有一个"\"

    点评

    这样粘贴代码,文件路径分隔符会丢失的  发表于 2021-3-15 22:16
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-11-24 01:29 , Processed in 0.041901 second(s), 16 queries , Gzip On, MemCache On.

    Powered by Discuz! X3.4

    © 1999-2023 Wooffice Inc.

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

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

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