vba - 无法打开用 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.
解决方案
您应该首先检查 SaveAs 方法。
当您键入“。”时,您应该已经注意到了。在 ActiveDocument 之后,智能感知选项列表中不存在 SaveAs。相反,您会得到 SaveAs2。
这样做的原因是 SaveAs 已被弃用并已被 SaveAs2 取代。旧方法仍然可用,但不能保证它会在未来的 Office/VBA 版本中继续存在。
SaveAs2 本身只是为 SaveAs 方法添加了一个新选项(兼容模式)。SaveAs2 或选择兼容性的能力都不能解决您的问题。相反,您必须使用 F1。
在 VBA IDE 中,将光标放在任何关键字上并按 F1 将打开该关键字的 MS 帮助页面(如果该关键字存在)。如果您在 SaveAs 上按 F1,您将不会获得任何帮助,这是一个通用页面,但如果您在 SaveAs2 上按它,您将获得此帮助页面。
当您查看帮助页面时,您会看到 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
祝你进一步的努力好运。
推荐阅读
- python - 在 Python 中将 cURL 存储为变量
- r - 重新排列数据框,使具有相似值的单元格位于同一列中
- haskell - 如何证明基本序列性质
- api - 在文件或数据库中配置?
- python - 无论如何我可以在不使用标记名的情况下获得 href 吗?
- javascript - BigchainDB sendCommit 代码:ERR_UNHANDLED_REJECTION 仅在 nodejs
- reactjs - Vimeo 嵌入不考虑宽度
- r - 将值分配给具有多个条件的新列
- javascript - 无法在 AWS Lambda 函数上使用 ES6;如何在 Lambda 中导入 ES6 模块
- excel - 如何生成唯一“组合”的两个单独的列列表?