ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 这个rtf格式文件更改为.doc格式的代码为什么只能改一下?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-6-1 19:56 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
VBA Office 2007/2003 word批量将.rtf格式文件更改为.doc格式文件

此程序为美国之音的.rtf格式转换为手机offic可以识别的.doc格式文件专用。

首先得建立一个文件夹,将所有的.rtf文件放在一起。

Sub rtf2doc()
    Dim file As String
    Dim Text As String
    Dim median As String
    Dim median_4 As String
    Dim yinhao As String
    Dim n As Integer
    n = 1

    file = Dir("E:\English Studying\voa2009\txt\")     '依次获取当前工作簿路径下的txt文件名,先输入路径,依个人情况更改Dir中的路径

    Do Until Len(file) = 0
        median = file                                  '提取完整的文件名(含后缀.rtf)
        median_4 = Left(file, Len(file) - 4)           '提取局部的文件名(不含后缀.rtf)

        yinhao = """"
        text1 = yinhao & median & yinhao               '当前打开文件的文件名(含后缀.rtf)
        text2 = yinhao & median_4 & ".doc" & yinhao    '要保存的文件的文件名(含后缀.doc)

        ChangeFileOpenDirectory "E:\English Studying\voa2009\txt\"      '依个人情况更改打开路径
        Documents.Open FileName:=text1, _
                       ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, _
                       PasswordDocument:="", PasswordTemplate:="", Revert:=False, _
                       WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _
                       wdOpenFormatAuto, XMLTransform:=""
                       
        ChangeFileOpenDirectory "E:\English Studying\voa2009\tools\"    '依个人情况更改保存路径
        ActiveDocument.SaveAs FileName:=text2, FileFormat _
                                             :=wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
                              True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
                              False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
                              SaveAsAOCELetter:=False
        ActiveWindow.Close

        n = n + 1
        file = Dir
    Loop
End Sub



以上代码为什么不能批处理?

TA的精华主题

TA的得分主题

发表于 2015-6-1 23:41 | 显示全部楼层
楼主,你先把单个.rtf文档转换为.doc文档搞掂,然后,用我的——循环遍历文件夹_集成(宏)的第1个选项:键入 0,把单个.rtf转换为.doc文档的代码拷贝到 SingleDoc 宏中,屏蔽原来的旧代码,可以试试(请此前备份):
Sub 循环遍历文件夹_集成()
    On Error Resume Next
    Dim fd As FileDialog, i As Long, doc As Document, p As String, e As Long, j As String, s As Long, t As Long
    If MsgBox("是否处理 Word 文档(*.doc)?(否则处理文本文档(*.txt))", vbYesNo + vbExclamation, "循环遍历文件夹_集成") = vbYes Then t = 0 Else t = 1
input_select:
    j = InputBox("======请输入各个功能对应的数字!======" & vbCr & "0=示例代码(自定义)" & vbCr & "1=批量打印" & vbCr & "2=批量合并" & vbCr & "3=批量转换" & vbCr & "4=提取文件名", "循环遍历文件夹_集成", "1")
    If j = "" Then Exit Sub
    If j = 0 Then
        e = 0
    ElseIf j = 1 Then
        e = 1
    ElseIf j = 2 Then
        Documents.Add
        If MsgBox("合并文档之间是否插入分页符?", vbYesNo + vbExclamation, "循环遍历文件夹_集成") = vbYes Then s = 1 Else s = 0
        e = 2
    ElseIf j = 3 Then
        e = 3
    ElseIf j = 4 Then
        Documents.Add
        e = 4
    Else
        GoTo input_select
    End If
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If fd.Show = -1 Then p = fd.SelectedItems(1) Else Exit Sub
    Set fd = Nothing
    If MsgBox("是否处理文件夹 " & p & "?", vbYesNo + vbExclamation, "循环遍历文件夹_集成") = vbNo Then Exit Sub
    With Application.FileSearch
'        .NewSearch
        .LookIn = p
        .SearchSubFolders = True
        If t = 0 Then .FileName = "*.doc" Else .FileName = "*.txt"
'        .FileType = msoFileTypeAllFiles
        If .Execute > 0 Then
            For i = 1 To .FoundFiles.Count
                If e = 4 Then GoTo un_need
                If t = 0 Then Set doc = Documents.Open(FileName:=.FoundFiles(i)) Else Set doc = Documents.Open(FileName:=.FoundFiles(i), Encoding:=936)
un_need:
                If e = 0 Then
                    SingleDoc
                ElseIf e = 1 Then
                    doc.PrintOut
                    doc.Close savechanges:=wdDoNotSaveChanges
                ElseIf e = 2 Then
                    doc.Content.Copy
                    doc.Close
                    Selection.EndKey Unit:=wdStory
                    Selection.Paste
                    If s = 1 Then Selection.InsertBreak Type:=wdPageBreak
                ElseIf e = 3 Then
                    If t = 0 Then doc.SaveAs FileName:=Left(doc.FullName, Len(doc.FullName) - 4) & ".txt", FileFormat:=wdFormatText Else doc.SaveAs FileName:=Left(doc.FullName, Len(doc.FullName) - 4) & ".doc", FileFormat:=wdFormatDocument
                    doc.Close
                ElseIf e = 4 Then
                    ActiveDocument.Content.InsertAfter Text:=.FoundFiles(i) & vbCr
                End If
            Next i
            MsgBox "处理完毕!共处理 " & .FoundFiles.Count & " 个文件。", vbOKOnly + vbExclamation, "循环遍历文件夹_集成"
        Else
            MsgBox "未发现文件!", vbOKOnly + vbCritical, "循环遍历文件夹_集成": End
        End If
    End With
    If e = 4 Then ActiveDocument.Content.Find.Execute findtext:=".doc", replacewith:="", Replace:=wdReplaceAll: ActiveDocument.Content.Characters.Last.Delete
    If e = 2 Or e = 4 Then MsgBox "文档尚未保存!请自行保存!", vbOKOnly + vbExclamation, "循环遍历文件夹_集成"
End Sub
Sub SingleDoc()
    ActiveDocument.Content.Font.Color = wdColorRed
    ActiveDocument.Close savechanges:=wdSaveChanges
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-6-1 23:43 | 显示全部楼层
一次转换数量最好不要超过400,最好是 300 以下,否则,Word 可能会崩溃呢!--最好用高速电脑。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-2 12:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2015-6-1 23:41
楼主,你先把单个.rtf文档转换为.doc文档搞掂,然后,用我的——循环遍历文件夹_集成(宏)的第1个选项:键 ...

试了,很好用,非常感谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-16 05:32 , Processed in 0.019867 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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