【发布时间】:2019-11-21 17:34:05
【问题描述】:
我正在尝试根据 Excel VBA 中的模板修改 Outlook 电子邮件的 HTML 正文。
我的代码是:
Sub Email_Button()
Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItemFromTemplate("S:\some\path\to\file\Email.oft")
With OutMail
.Importance = olImportanceHigh
.Subject = "Subject " & Date
.Attachments.Add Application.ActiveWorkbook.FullName
.HTMLBody = WorksheetFunction.Substitute(OutMail.HTMLBody, "%target%", "replacement")
.Display
End With
' *** TIDY UP ***
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
问题与this非常相似。
我明白了
运行时错误 287。应用程序定义或对象定义的错误
在 .HTMLBody 修改行上。
如果我删除此行,则会显示电子邮件供用户在点击发送之前检查。
我已经引用了 Microsoft Outlook 15 对象库。
我补充说:
With OutMail
.bodyFormat = olFormatHTML
但是在 Substitute 行上出现了同样的错误,所以我将替代更改为:
.HTMLBody = "<HTML><BODY>Some HTML text here</BODY></HTML>"
并且电子邮件的正文已更新。
所以只有在尝试使用替代品时才会出现错误。
从调试器看来,没有 HTML 正文:
我已确认以编程方式将正文类型设置为 HTML:
并通过打开消息并检查:
【问题讨论】:
-
当 VBA 有一个内置方法可以这样做时,为什么要尝试使用工作表函数来进行替换?
OutMail.HTMLBody = Replace(OutMail.HTMLBody, "String to find", "Replacement string") -
@RyszardJędraszyk 然而并没有解决这个问题。
-
如果是 Outlook 安全错误(我认为可能是这样),有没有办法将 HTML 正文存储为文件,单独修改然后将其添加到正文中?
-
OutMail是 HTML 格式的邮件吗? -
@TimWilliams 是的。