簡體   English   中英

無法打開用 VBA 保存的 Word .docm 文檔

[英]Cannot open Word .docm document saved with VBA

我正在嘗試保存啟用 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.

您應該首先檢查 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 (Now 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

祝你的進一步努力好運。

由於從模板創建的文檔不包含任何宏,因此將其保存為 docm 格式毫無意義。 此外,除非您在 SaveAs 行中實際指定文件格式,否則您將獲得的只是本機格式 (docx),在這種情況下,您需要做的就是更改擴展名以適應:

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

並將其作為您的電子郵件附件參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM