从Excel修改Outlook电子邮件模板的正文

时间:2019-07-11 23:57:29

标签: excel vba outlook outlook-vba

我正在尝试从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正文:

enter image description here

但是我已经确认主体类型都通过编程方式设置为HTML:

enter image description here

然后通过打开常规消息并检查:

enter image description here

2 个答案:

答案 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,然后重试。

更多信息https://support.microsoft.com/en-za/help/926512/information-for-administrators-about-e-mail-security-settings-in-outlo