ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 循环遍历文件夹、doc2txt、txt2doc 圆满成功!完美!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-2-11 09:24 | 显示全部楼层 |阅读模式
本帖最后由 413191246se 于 2012-2-17 09:55 编辑

    据说“循环遍历文件夹及子文件夹”有三种方法(查找法、递归法、双字典法),本帖介绍的方法是查找法,是我在网络上找到的语句在学习中按 F1 查看帮助时,发现原来微软官方的“VBA帮助”文件中就已经有这些语句了!此种方法可能是最慢的,但对于我等菜鸟来说,简洁实用好用够用易用方便易懂比啥都好,不敢独享,贡献给 VBA 菜鸟朋友们!
    “循环遍历文件夹”宏是针对无加密文档的情况!如果文件夹中有加密文档,则在处理过程中会出错,必须加入容错处理语句 On Error Resume Next 在声明前面一行。如果知道密码则键入密码,否则按确定或取消即可跳过!具体实例请参照 doc2txt 宏。
    doc2txt 宏,最多一次性可转换 1767 个 Word 文档,建议一次性转换 5、600 个为宜,以免引起 Word 2003 程序崩溃!(txt2doc 宏成功!昨晚发现“确认转换”是TRUE,让它变为FALSE就行了,尚未测试一次性能转换多少个文档。)
    重新上传一份特意为“循环遍历文件夹”专题做出的 demo 示例文件(摘自《十七大报告》,方便各位朋友反复演练,可打开“资源管理器”删除和重新解压,加入了3个加密文件,密码分别为123,456,789): demo 循环遍历文件夹及子文件夹 - 示例文件.rar (42.56 KB, 下载次数: 268)
    *** 以下为 doc2txt宏、txt2doc宏、循环遍历文件夹(及子文件夹)宏的代码(适用于 Word 2003 VBA),直接拷贝到 VBE 中即可(但“循环遍历文件夹”宏仅仅作为基础,具体拓展实例请参照 doc2txt 宏):

Sub doc2txt()
    On Error Resume Next
    Dim fd As FileDialog, i As Long, doc As Document, p As String
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If fd.Show = -1 Then p = fd.SelectedItems(1) Else Exit Sub
    Set fd = Nothing
    If MsgBox("Are you sure to convert? (" & p & ")", vbYesNo + vbExclamation, "doc2txt") = vbNo Then Exit Sub
    With Application.FileSearch
        .LookIn = p
        .SearchSubFolders = True
        .FileName = "*.doc"
        If .Execute > 0 Then
            For i = 1 To .FoundFiles.Count
                Set doc = Documents.Open(FileName:=.FoundFiles(i))
                doc.SaveAs FileName:=Left(doc.FullName, Len(doc.FullName) - 4) & ".txt", FileFormat:=wdFormatText
                ActiveDocument.Close
            Next i
            MsgBox "Complete! There were " & .FoundFiles.Count & " file(s) converted.", vbOKOnly + vbExclamation, "doc2txt"
        Else
            MsgBox "There were no files found.", vbOKOnly + vbCritical, "doc2txt"
        End If
    End With
End Sub
Sub txt2doc()
    Dim fd As FileDialog, i As Long, doc As Document, p As String
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If fd.Show = -1 Then p = fd.SelectedItems(1) Else Exit Sub
    Set fd = Nothing
    If MsgBox("Are you sure to convert? (" & p & ")", vbYesNo + vbExclamation, "txt2doc") = vbNo Then Exit Sub
    With Application.FileSearch
        .LookIn = p
        .SearchSubFolders = True
        .FileName = "*.txt"
        If .Execute > 0 Then
            For i = 1 To .FoundFiles.Count
                Set doc = Documents.Open(FileName:=.FoundFiles(i), ConfirmConversions:=False)
                doc.SaveAs FileName:=Left(doc.FullName, Len(doc.FullName) - 4) & ".doc", FileFormat:=wdFormatDocument
                ActiveDocument.Close
            Next i
            MsgBox "Complete! There were " & .FoundFiles.Count & " file(s) converted.", vbOKOnly + vbExclamation, "txt2doc"
        Else
            MsgBox "There were no files found.", vbOKOnly + vbCritical, "txt2doc"
        End If
    End With
End Sub
Sub 循环遍历文件夹()
    Dim i As Long, doc As Document
    With Application.FileSearch
'        .NewSearch
        .LookIn = "D:\LoopFolder"
        .SearchSubFolders = True
        .FileName = "*.doc"
'        .FileType = msoFileTypeAllFiles
        If .Execute > 0 Then
'            MsgBox "There were " & .FoundFiles.Count & " file(s) found."
            For i = 1 To .FoundFiles.Count
'                MsgBox .FoundFiles(i)
                Set doc = Documents.Open(FileName:=.FoundFiles(i))
                doc.Content.Font.Color = wdColorRed
                doc.Close savechanges:=wdSaveChanges
            Next i
        Else
            MsgBox "There were no files found."
        End If
    End With
End Sub

TA的精华主题

TA的得分主题

发表于 2012-2-11 09:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-2-11 17:08 | 显示全部楼层
有注释,很好。收藏备用!

TA的精华主题

TA的得分主题

发表于 2012-2-11 18:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
有点像守柔版主的代码!很久前就收藏过他的代码了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-11 19:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
像但不是,因为这些语句在微软官方“VBA帮助”文档中,就有的,只不过未作为专题来列出,可散见于 .lookin .filesearch .filename 等各个语句示例中,并不是守版代码。

TA的精华主题

TA的得分主题

发表于 2012-2-11 19:07 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-2-12 08:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
收藏了                  

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-13 12:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
顶以更新。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-14 01:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
顶以更新。。。AGAIN

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-14 07:26 | 显示全部楼层
    最新报告——今天早上开机后,特意把单位的包含 6872 个文件 压缩包(33.4MB,绝大多数是 Word 2003 文档,少量是 Word 2000 文档、Word 7.0 文档、纯文本文档 和 Excel 文档)解压到 F 盘的充裕硬盘空间上,用 doc2txt 宏对包含 6872 个文档的文件夹(及子文件夹)进行转换处理(处理方法是:打开每一个 Word 文档,另存为纯文本文档),中途有一次停了很长时间,以为会死机,结果挺过来了,继续处理,最后不幸的是,终于引起 Word 2003 崩溃!!!
    最终结果:原来总文件夹中共有 11 个 TXT 文档,目前共有 1778 个 TXT 文档,所以,本次 doc2txt 格式转换共处理了 1778-11=1767 个文档(才崩溃,但我是刚开机内存很充裕的情况下转换的,这一点也是一个因素)!
    所以,我给各位朋友们一个建议:为了避免 Word 2003 程序崩溃,一次性转换文档(doc2txt)不要太多!最好是对总文件夹下的每个子文件夹单独转换(我现在就要重新解压,重新转换处理每个子文件夹。子文件夹中还可能有子文件夹)。对每个子文件夹改名为相同的名称(分别地),如 D:\My Documents\doc2txt,转换完毕,再在“资源管理器”的编辑菜单中撤销重命名……
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-10 04:25 , Processed in 1.050538 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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