Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据Excel中的模板修改Outlook电子邮件的HTML正文_Excel_Vba_Outlook - Fatal编程技术网

根据Excel中的模板修改Outlook电子邮件的HTML正文

根据Excel中的模板修改Outlook电子邮件的HTML正文,excel,vba,outlook,Excel,Vba,Outlook,我正在尝试修改Outlook电子邮件的HTML正文,它基于Excel VBA中的模板 我的代码是: 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\fil

我正在尝试修改Outlook电子邮件的HTML正文,它基于Excel VBA中的模板

我的代码是:

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
这个问题非常类似于

我明白了

运行时错误287。应用程序定义或对象定义错误

在.HTMLBody修改行中

如果我删除此行,则会显示电子邮件,供用户在点击“发送”之前检查

我引用了Microsoft Outlook 15对象库

我补充说:

With OutMail
    .bodyFormat = olFormatHTML
但在替换行中出现了相同的错误,因此我将替换更改为:

.HTMLBody = "<HTML><BODY>Some HTML text here</BODY></HTML>"
.HTMLBody=“此处有一些HTML文本”
邮件的正文也被更新了

因此,只有在尝试使用替代品或其来处理oft时,才会出现错误

调试器显示没有HTML正文:

我已确认body type已通过编程方式设置为HTML:

打开oft消息并检查:


问题的原因可能与
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
Sub-CreateHTMLMail()
将OutApp设置为Outlook.Application
Set-OutApp=CreateObject(“Outlook.Application”)
'创建新的电子邮件项目并修改其属性。
将objMail设置为Outlook.MailItem
'创建电子邮件项目
设置objMail=OutApp.CreateItemFromTemplate(“S:\some\path\to\file\Email.oft”)
用objMail
'将正文格式设置为HTML
.BodyFormat=olFormatHTML
.HTMLBody=“在此处输入消息文本。”
.展示
以
端接头

另一个方面是Outlook安全提示。阅读本文中的更多信息。

问题的原因可能与
替换方法有关,因此我建议运行以下代码以确保一切正常工作:

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
Sub-CreateHTMLMail()
将OutApp设置为Outlook.Application
Set-OutApp=CreateObject(“Outlook.Application”)
'创建新的电子邮件项目并修改其属性。
将objMail设置为Outlook.MailItem
'创建电子邮件项目
设置objMail=OutApp.CreateItemFromTemplate(“S:\some\path\to\file\Email.oft”)
用objMail
'将正文格式设置为HTML
.BodyFormat=olFormatHTML
.HTMLBody=“在此处输入消息文本。”
.展示
以
端接头

另一个方面是Outlook安全提示。请阅读文章中的更多信息。

最可能的原因是Outlook安全性

出于安全目的,HTMLBody、HTMLEditor、Body和WordEditor属性都受到地址信息安全提示的约束,因为邮件正文通常包含发件人或其他人的电子邮件地址

您可以在HKCU\Software\Policys\Microsoft\office\16.0\outlook\security中找到安全配置\ (将16.0更改为您的office版本)

您可以检查两个值,PrompTomAddressBookAccess和PrompTomAddressInformation Access

将其更改为2(或询问系统管理员),重新启动Outlook并重试


更多信息

最可能的原因是Outlook安全性

出于安全目的,HTMLBody、HTMLEditor、Body和WordEditor属性都受到地址信息安全提示的约束,因为邮件正文通常包含发件人或其他人的电子邮件地址

您可以在HKCU\Software\Policys\Microsoft\office\16.0\outlook\security中找到安全配置\ (将16.0更改为您的office版本)

您可以检查两个值,PrompTomAddressBookAccess和PrompTomAddressInformation Access

将其更改为2(或询问系统管理员),重新启动Outlook并重试


更多信息

当VBA有内置方法进行替换时,为什么要尝试使用工作表函数进行替换
OutMail.HTMLBody=Replace(OutMail.HTMLBody,“要查找的字符串”,“替换字符串”)
@RyszardJędraszyk,但这并不能解决问题。如果是Outlook安全性错误(我认为可能是),是否有办法将HTML正文存储为文件,单独修改它,然后将其添加到正文中?是HTML格式的邮件吗?@TimWilliams是。如果VBA有内置方法,为什么要尝试使用工作表函数进行替换
OutMail.HTMLBody=Replace(OutMail.HTMLBody,“要查找的字符串”,“替换字符串”)
@RyszardJędraszyk,但这并不能解决问题。如果是Outlook安全性错误(我认为可能是),是否有办法将HTML正文存储为文件,单独修改它,然后将其添加到正文中?是
OutMail
HTML格式的邮件吗?@TimWilliams-yes。