Не удается открыть документ Word .docm, сохраненный с помощью VBA - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь сохранить шаблон Word Macro-enabled и затем отправить полученный файл по электронной почте, но файл, сохраненный (и отправленный) как .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 голосов
/ 18 октября 2018

Поскольку документ, созданный из шаблона, не будет содержать никаких макросов, сохранять его в формате docm бессмысленно.Кроме того, если вы на самом деле не указали формат файла в строке SaveAs, все, что вы получите, - это собственный формат (docx), и в этом случае все, что вам нужно, это изменить расширение на подходящий:

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

и укажите это для своего вложения электронной почты.

0 голосов
/ 18 октября 2018

Вы должны начать с проверки метода SaveAs.

Вы должны были заметить это, когда набирали '.'после ActiveDocument, чтобы SaveAs не присутствовал в списке опций intellisense.Вместо этого вам предлагается SaveAs2.

Причина этого в том, что SaveAs устарела и была заменена SaveAs2.Старый метод все еще доступен, но его дальнейшее присутствие в будущих выпусках Office / VBA не может быть гарантировано.

SaveAs2 сам по себе просто добавляет новую опцию (режим совместимости) в метод SaveAs.Ни SaveAs2, ни возможность выбора совместимости не решат вашу проблему.Вместо этого вы должны использовать F1.

. В VBA IDE, поместив курсор на любое ключевое слово и нажав F1, откроется страница справки MS для этого ключевого слова (если ключевое слово существует).Если вы нажмете F1 в SaveAs, вы не получите никакой помощи, просто пошлете обычную страницу, но если вы нажмете ее во время 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.Чтобы сохранить документ в другом формате, укажите соответствующее значение для свойства SaveFormat объекта FileConverter.

Тот факт, что 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

Удачи в дальнейших начинаниях.

...