我有一份每天发送的报告。在其中有一个链接的图像,该图像指向我需要粘贴到电子邮件中并发送的范围。我已将电子邮件另存为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做到这一点?