除非显示电子邮件,否则图像将不会替换电子邮件正文中的文本,为什么?

时间:2018-11-29 12:58:50

标签: excel vba outlook word-vba outlook-vba

我有一份每天发送的报告。在其中有一个链接的图像,该图像指向我需要粘贴到电子邮件中并发送的范围。我已将电子邮件另存为Outlook模板文件,可以在需要时进行修改。

我的代码从Excel运行。 我创建一个Outlook对象,并从.oft模板文件中打开Outlook电子邮件。然后,我想找到标识符文本(*INSERT IMAGE HERE*),并将其替换为Excel中的链接图像,该图像已从剪贴板复制。我试图将其添加为InLineShape,以便它在电子邮件正文中正常运行。由于我提出了另一个问题,我可以正确替换文本,按需粘贴图像并调整其大小,但是奇怪的事情已经开始发生。

按原样运行宏时,不会替换文本,也不会添加图像。当我逐步浏览并添加快速.Display行进行故障排除时,将显示该图像。我想避免在出于效率目的而发送电子邮件之前必须先显示电子邮件。我不知道这是怎么发生的或为什么发生的。

这是我的代码的快速示例:

Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookEmail = OutlookApp.CreateItemFromTemplate(templatePath)

ThisWorkbook.Worksheets("Email Sheet").Pictures("Summary Email Screenshot").Copy 

Set EmailWordEditor = OutlookEmail.GetInspector.WordEditor 
Set EmailText = EmailWordEditor.Content 

With EmailText.Find 'Using the .Find method to find the text identifier
    .ClearFormatting
    .text = "*INSERT IMAGE HERE*" 
    .MatchCase = True 
    .MatchWildcards = False 
    If .Execute Then 'If found, delete text, paste image
        EmailText.Delete 
        EmailText.PasteSpecial Placement:=wdInLine 
    End If
End With

EmailWordEditor.InlineShapes(EmailWordEditor.InlineShapes.count).ScaleHeight = 75 
'OutlookEmail.Display 'With this uncommented, the image is loaded properly
OutlookEmail.Send 

Set OutlookApp = Nothing 'Unload the objects properly
Set OutlookEmail = Nothing

我非常精通Excel VBA,但这是我第一次尝试使用Outlook和Word VBA,请耐心等待。

编辑11/30/18

我已经对问题进行了更多研究,并了解到在执行.Display时,Excel会进行某些检查以验证电子邮件中的数据。从Dmitry Streblechenko对另一篇文章的评论到堆栈溢出:

  

当您触摸Outlook检查器(通过Display,Close,GetInspector)时,Outlook运行额外的代码来验证您的数据。您很幸运,它足够聪明,可以修复您的附件。如果您不想依赖于此,请显式设置PR_ATTACH_CONTENT_ID属性-这是Outlook知道特定img标签必须使用哪个附件的方式。

我不想用HTML触摸电子邮件正文,因为模板中的内容每周都在*INSERT IMAGE HERE*标识符之前更改。如果我是从头开始构建电子邮件,则HTML路由可能会更容易,但是我选择了.WordEditor路由来专门规避此问题。我也根本不知道如何用HTML编写代码,因此尝试用它解决这个问题对我来说将更加困难。有什么方法可以手动验证电子邮件正文的内容,而不必使用.Display来使Outlook做到这一点?

0 个答案:

没有答案