Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA脚本将.rtf文件的文件夹转换为.docx文件-两个小问题_Vba_Ms Word - Fatal编程技术网

VBA脚本将.rtf文件的文件夹转换为.docx文件-两个小问题

VBA脚本将.rtf文件的文件夹转换为.docx文件-两个小问题,vba,ms-word,Vba,Ms Word,我在Word 2013中使用VBA脚本(见下文)将.rtf文件文件夹转换为.docx文件。它大部分是有效的,但有两个小问题 Sub ConvertRtfToDocx() Set oWord = CreateObject("Word.Application") With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Select folder..." .Show

我在Word 2013中使用VBA脚本(见下文)将.rtf文件文件夹转换为.docx文件。它大部分是有效的,但有两个小问题

Sub ConvertRtfToDocx()

    Set oWord = CreateObject("Word.Application")

    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Select folder..."
        .Show
        myFolder = .SelectedItems.Item(1)
    End With

    myWildCard = InputBox(prompt:="Enter wild card...")

    myDocs = Dir(myFolder & "\" & myWildCard)

    While myDocs <> ""
        Debug.Print myDocs
        Set oDoc = oWord.Documents.Open(myFolder & "\" & myDocs)
        oDoc.SaveAs myFolder & "\" & Left(myDocs, Len(myDocs) - 4) & ".docx", _
            wdFormatXMLDocument
        myDocs = Dir()
    Wend
    oWord.Quit

End Sub
  • 我必须承认每个原始文件都是一个.rtf文件。Word打开每个.rtf文件时,会出现一个对话框,要求我确认每个文件都是.rtf文件
  • 当我在Word中查看已转换的.docx文件时,有一个“compatibility mode”标题,这表明我没有正确转换
  • 这些问题有解决办法吗?第一种类型破坏了脚本编写的全部意义,我担心第二种类型会导致无法预见的问题

    Sub ConvertRtfToDocx()
    
        Set oWord = CreateObject("Word.Application")
    
        With Application.FileDialog(msoFileDialogFolderPicker)
            .Title = "Select folder..."
            .Show
            myFolder = .SelectedItems.Item(1)
        End With
    
        myWildCard = InputBox(prompt:="Enter wild card...")
    
        myDocs = Dir(myFolder & "\" & myWildCard)
    
        While myDocs <> ""
            Debug.Print myDocs
            Set oDoc = oWord.Documents.Open(myFolder & "\" & myDocs)
            oDoc.SaveAs myFolder & "\" & Left(myDocs, Len(myDocs) - 4) & ".docx", _
                wdFormatXMLDocument
            myDocs = Dir()
        Wend
        oWord.Quit
    
    End Sub
    
    子转换器rtftodocx()
    Set oWord=CreateObject(“Word.Application”)
    使用Application.FileDialog(msoFileDialogFolderPicker)
    .Title=“选择文件夹…”
    显示
    myFolder=.SelectedItems.Item(1)
    以
    myWildCard=InputBox(提示:=“输入通配符…”)
    myDocs=Dir(myFolder&“\”&myWildCard)
    而myDocs“
    调试。打印myDocs
    设置oDoc=oWord.Documents.Open(myFolder&“\”&myDocs)
    oDoc.SaveAs myFolder&“\”&Left(myDocs,Len(myDocs)-4)和“.docx”_
    wdFormatXMLDocument
    myDocs=Dir()
    温德
    奥沃德,退出
    端接头
    
    以下代码有效

    Sub ConvertRtfToDocx()
    
        With Application.FileDialog(msoFileDialogFolderPicker)
            .Title = "Select folder..."
            .Show
            myFolder = .SelectedItems.Item(1)
        End With
    
        myWildCard = InputBox(prompt:="Enter wild card...")
    
        myDocs = Dir(myFolder & "\" & myWildCard)
    
        While myDocs <> ""
            Documents.Open FileName:=myFolder & "\" & myDocs, ConfirmConversions:=False
            ActiveDocument.SaveAs2 FileName:=myFolder & "\" & Left(myDocs, Len(myDocs) - 4) & ".docx", _
                FileFormat:=wdFormatDocumentDefault, _
                CompatibilityMode:=wdCurrent
            ActiveDocument.Close SaveChanges:=False
            myDocs = Dir()
        Wend
    
    End Sub
    
    子转换器rtftodocx()
    使用Application.FileDialog(msoFileDialogFolderPicker)
    .Title=“选择文件夹…”
    显示
    myFolder=.SelectedItems.Item(1)
    以
    myWildCard=InputBox(提示:=“输入通配符…”)
    myDocs=Dir(myFolder&“\”&myWildCard)
    而myDocs“
    文档。打开文件名:=myFolder&“\”&myDocs,ConfirmConversions:=False
    ActiveDocument.SaveAs2文件名:=myFolder&“\”&左(myDocs,Len(myDocs)-4)和“.docx”_
    FileFormat:=wdFormatDocumentDefault_
    相容性模式:=wdCurrent
    ActiveDocument.Close SaveChanges:=False
    myDocs=Dir()
    温德
    端接头
    
    我做了一些重构(例如,使用
    ActiveDocument
    而不是创建自己的对象),但真正的改变是

  • 打开时设置
    ConfirmConversions:=False
  • 使用
    SaveAs2
    方法并设置
    FileFormat:=wdFormatDocumentDefault
    CompatibilityMode:=wdCurrent

  • 我想这两个都可以设置为默认值(我被Office选项弄得不知所措,只保留默认值)。

    您从哪个应用程序运行此代码?您使用的是哪个版本的Office?我在2010年测试了它,没有你提到的任何问题…@KazJaw我使用Word 2013。.rtf文件是由一些基于Java的程序生成的,这有什么关系吗?我不认为这是因为.rtf文件不是用Word生成的。我在Word中创建了一个简单的.rtf文件,并且遇到了相同的两个问题。因此,我无法重现您的错误,因此我对第1点有简单的建议-尝试在开始时添加
    Application.DisplayAllerts=False
    ,最后将其设置回
    True
    。或者试试这种方法,
    oWord.DisplayAllerts=False
    等等…@KazJaw都不起作用。两种症状都持续存在。