首页 > 解决方案 > 无法打开用 VBA 保存的 Word .docm 文档

问题描述

我正在尝试保存启用 Word 宏的模板,然后通过电子邮件发送生成的文件,但无法打开保存(和发送)为 .docm 的文件。它抛出这个错误:

"We're sorry. We can't open B.docm because we found a problem with its contents"

我需要做些什么来“转换”文档吗?找不到任何关于它的东西,每个人似乎都同意我保存文档的方式很好。

这是我正在使用的代码:

Private Sub CommandButton1_Click()

'Save Document
    Dim wdApp As Word.Application
    Set wdApp = GetObject(, "Word.Application")

    wdApp.ActiveDocument.SaveAs "H:\Word\B.docm"


'Send Email
    Dim outlook         As outlook.Application
    Dim maiMessage      As outlook.MailItem        

    Set outlook = New outlook.Application
    Set maiMessage = outlook.CreateItem(olMailItem)
    With maiMessage
        .Subject = "Sent"
        .Recipients.Add Name:="name@company.com"
        .Attachments.Add Source:="H:\Word\B.docm"
        .Send
    End With

End Sub

更多信息:

- If I save the document by normal means (File > Save as > .docm), it works.
- If I save the document using the macro but with .docx extension, it also works.

标签: vbams-word

解决方案


您应该首先检查 SaveAs 方法。

当您键入“。”时,您应该已经注意到了。在 ActiveDocument 之后,智能感知选项列表中不存在 SaveAs。相反,您会得到 SaveAs2。

这样做的原因是 SaveAs 已被弃用并已被 SaveAs2 取代。旧方法仍然可用,但不能保证它会在未来的 Office/VBA 版本中继续存在。

SaveAs2 本身只是为 SaveAs 方法添加了一个新选项(兼容模式)。SaveAs2 或选择兼容性的能力都不能解决您的问题。相反,您必须使用 F1。

在 VBA IDE 中,将光标放在任何关键字上并按 F1 将打开该关键字的 MS 帮助页面(如果该关键字存在)。如果您在 SaveAs 上按 F1,您将不会获得任何帮助,这是一个通用页面,但如果您在 SaveAs2 上按它,您将获得此帮助页面。

https://docs.microsoft.com/en-us/office/vba/api/word.saveas2?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev11.query%3FappId%3DDev11IDEF1%26l% 3Den-US%26k%3Dk(vbawd10.chm158007864)%3Bk(TargetFrameworkMoniker-Office.Version%3Dv16)%26rd%3Dtrue

当您查看帮助页面时,您会看到 SaveAs2 方法的第二个参数是“FileFormat”,即

保存文档的格式。可以是任何 WdSaveFormat 常量。要以另一种格式保存文档,请为 FileConverter 对象的 SaveFormat 属性指定适当的值。

当您只提供文件名时,SaveAs(现在 SaveAs2)没有抱怨的事实意味着该方法提供了一个默认选项,这很可能是“将此文档另存为 word 格式文档”选项(wdFormatDocumentDefault )。

要将文档保存为启用宏的 word 模板,您需要指定枚举常量 wdFormatXMLTemplateMacroEnabled。

例如

wdApp.ActiveDocument.SaveAs "H:\Word\B.docm", wdFormatXMLTemplateMacroEnabled

如果您录制了一个宏,在此期间您将文档保存为模板以查看 Word 在相同情况下会做什么(诚然并不总是有帮助),您也必须使用此选项。

Sub Macro1()
'
' Macro1 Macro
'
'
    ChangeFileOpenDirectory _
        "C:\Users\user1\Documents\Custom Office Templates\"
    ActiveDocument.SaveAs2 FileName:= _
        "C:\Users\user1\Documents\Custom Office Templates\test.dotm", FileFormat _
        :=wdFormatXMLTemplateMacroEnabled, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False, CompatibilityMode:=15
End Sub

祝你进一步的努力好运。


推荐阅读