我正在尝试从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十分相似。
运行上面的代码时,我得到Run Time Error 287. Application-defined or object-defined error
-错误发生在.HTMLBody修改行上。
如果我删除此行,代码运行正常,并显示电子邮件-供用户在点击发送之前进行检查。
我已经引用了Microsoft Outlook 15对象库。
怎么了?
更新
我添加了:
With OutMail
.bodyFormat = olFormatHTML
但是在替换行上仍然出现相同的错误。所以我将替代项更改为:
.HTMLBody = "<HTML><BODY>Some HTML text here</BODY></HTML>"
电子邮件正文已更新为此,并且没有错误。
因此,该错误仅在尝试使用替代或与其相关的情况时出现。
在调试器中似乎没有HTML正文:
但是我已经确认主体类型都通过编程方式设置为HTML:
然后通过打开常规消息并检查:
答案 0 :(得分:0)
问题的原因可能与Substitute
方法有关,所以我建议运行以下代码以确保一切正常:
Sub CreateHTMLMail()
Dim OutApp As Outlook.Application
Set OutApp = CreateObject("Outlook.Application")
'Creates a new email item and modifies its properties.
Dim objMail As Outlook.MailItem
'Create email item
Set objMail = OutApp.CreateItemFromTemplate("S:\some\path\to\file\Email.oft")
With objMail
'Set body format to HTML
.BodyFormat = olFormatHTML
.HTMLBody = "<HTML><BODY>Enter the message text here. </BODY></HTML>"
.Display
End With
End Sub
另一方面是Outlook安全提示。在"A program is trying to send an e-mail message on your behalf" warning in Outlook文章中了解有关此内容的更多信息。
答案 1 :(得分:0)
最可能的原因是Outlook安全性。
出于安全目的,HTMLBody,HTMLEditor,Body和WordEditor属性均受地址信息安全提示的约束,因为邮件的正文通常包含发件人或其他人的电子邮件地址。
您可以在HKCU \ Software \ Policies \ Microsoft \ office \ 16.0 \ outlook \ security \中找到安全配置 (将16.0更改为您的办公版本)
您可以检查两个值,promptoomaddressaddressbookaccess和hintingoomaddressinformationaccess
将它们更改为2(或询问系统管理员),重新启动Outlook,然后重试。