【问题标题】:How do I change a file format when saving a Microsoft Word Doc programmatically?以编程方式保存 Microsoft Word Doc 时如何更改文件格式?
【发布时间】:2015-05-20 15:07:42
【问题描述】:

我目前正在修改 Microsoft Word 文档以提示用户在保存时执行某些操作。

他们选择答案后,我想将文档另存为不同的文件类型,专门将其从 .docm 转换为 .docx 文件。

 Sub FileSave()
 Dim myQ As Integer
 With ActiveDocument

    myQ = MsgBox("Is this the Final version of this document?  Clicking  'Yes' will permanently disable macros for moving issues and remove the blank final page.", vbQuestion + vbYesNo)
    If myQ = vbYes Then
      .SaveAs2 ActiveDocument.Name & ".docx"
      DeleteFinalPage
    Else
       .SaveAs2 ActiveDocument.Name
    End If

    End With

 End Sub

如您所见,这会将文档保存为“DocumentNameHere.docm.docx”

我该如何摆脱文件名中那个讨厌的 .docm?

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    不要使用文件扩展名来指示文件类型。不要使用固定数量的字符来删除扩展名——这对于老式的 .doc(而不是 .docm)会失败。使用 InStrRev。这是为这样的事情而设计的。

    去掉扩展,然后使用专门用于此目的的参数保存为所需的类型:FileFormat。

    doc.SaveAs2 Left(doc.Name, InStrRev(doc.Name, ".") - 1), wdSaveFormat.wdFormatXMLDocument

    【讨论】:

    • 这确实解决了我之前的问题。你们真棒!谢谢!我假设只是更改扩展名不会修改任何使 .docx 和 .docm 不同的内部垃圾?这就是为什么我们使用 FileFormat 来转换它?
    • @Arcus 很高兴它有帮助。你是对的 - 文件扩展名只是将文件与 Windows 中的应用程序相关联。但是,Word 不允许您将文件打开/保存为与其扩展名不同的格式(出于各种原因,主要是出于安全原因)
    【解决方案2】:

    为了摆脱 .docm 我会这样做

    .saveAs2 left(ActiveDocument.Name,len(ActiveDocument.Name)-5)

    这将去掉 ActiveDocument.Name 的最后 5 个字符,只留下文档名称而不是扩展名。

    【讨论】:

    • 这行得通,但没有。我愚蠢地认为您可以更改扩展名,一切都会好起来的。但是,在我更改扩展名并打开新的 .docx 文件后,我得到了这个:“文件 FileNameHere.docx 无法打开,因为内容有问题。详细信息?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    相关资源
    最近更新 更多