无法打开用VBA保存的Word .docm文档

时间:2018-10-18 07:10:34

标签: vba ms-word word-vba

我试图保存一个启用Word Macro的模板,然后通过电子邮件发送生成的文件,但是保存(并发送)为.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.

2 个答案:

答案 0 :(得分:0)

您应该先检查SaveAs方法。

您应该已经注意到,当您键入'。'时。在ActiveDocument之后,Intellisense选项列表中不存在SaveAs。相反,您会得到SaveAs2。

这样做的原因是不推荐使用SaveAs,并且已被SaveAs2取代。旧方法仍然可用,但是不能保证在Office / VBA的将来版本中继续存在该方法。

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

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

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)。

为将文档另存为启用宏的单词模板,您需要指定枚举常量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

祝您一切顺利。

答案 1 :(得分:0)

由于从模板创建的文档不会包含任何宏,因此将其保存为docm格式毫无意义。此外,除非您在SaveAs行中实际指定文件格式,否则,您将获得的只是本机格式(docx),在这种情况下,您需要做的就是更改扩展名以适合:

wdApp.ActiveDocument.SaveAs“ H:\ Word \ B.docx”

,并将其作为电子邮件附件的参考。