用剪贴板中的图片替换电子邮件中的文本

时间:2018-11-27 12:53:51

标签: excel vba outlook ms-word

我有一份每天发送的报告。
在其中有一个链接的图像,该图像指向我需要粘贴到电子邮件中并发送的范围。
我已将电子邮件另存为Outlook模板文件,可以在需要时进行修改。
我从Excel运行的代码。
我创建一个Outlook对象,并从.oft模板文件中打开Outlook电子邮件,然后我想查找标识符文本(在此处插入图像),并将其替换为Excel中的链接图像,从剪贴板复制。  我正在尝试将其添加为InLineShape,以使其在电子邮件正文中正常运行。
我一直在尝试使用电子邮件正文中定义的WordEditor进行操作。
我研究了HTML来做到这一点,但我认为WordEditor对象将是更好的方法。  粘贴后,需要将刻度高度设置为0.75,以便正确显示。
从那里,只需单击发送。

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

Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookEmail = OutlookApp.CreateItemFromTemplate(templatePath) 
OutlookEmail.Display 'Just for code checking
ThisWorkbook.Worksheets("Email Sheet").Pictures("Summary Email Screenshot").Copy 
Set EmailText = OutlookEmail.GetInspector.WordEditor 
With EmailText.Range.Find 
    .ClearFormatting
    .Execute findText:="*INSERT IMAGE HERE*", MatchWholeWord:=True, MatchCase:=True, _
        MatchWildcards:=False, ReplaceWith:="^c", Replace:=wdReplaceOne
End With

EmailText.InlineShapes(EmailText.InlineShapes.count).ScaleHeight = 75 
'OutlookEmail.Send

在我发送最后一行时出现问题。
发生的情况是,它不是作为InLineShape插入的,而是一个形状,以便它浮动在文本的顶部。
我需要它作为InLineShape,以便图像下移并显示后的内容而不是被它覆盖。  我一直忙于论坛讨论,试图找到答案,但无济于事。
我非常精通Excel VBA,但这是我第一次尝试使用Outlook和Word VBA,所以请耐心等待。

1 个答案:

答案 0 :(得分:2)

默认情况下,粘贴图像时,Word将使用“文件/选项/高级”中“插入,粘贴图片”部分的“剪切,复制和粘贴”设置。因此,在某些计算机上,图像可能会粘贴为InlineShape,而在其他计算机上可能会粘贴为Shape。

如果仅粘贴代码,然后使用PasteSpecial,则可以使用wdFloatOverText或wdInLine的相应WdOLEPlacement枚举值来指定内联或文本换行。

由于粘贴命令来自^c替换文本,因此这种方法不适用于这种情况。这意味着需要更改“选项”设置。并且,为了使它易于使用,在代码末尾应将其改回。

下面是一些示例代码,演示了如何检查当前选项,如有必要,请进行更改,然后在过程结束时进行重置。我不熟悉通过Outlook对象模型使用Word的方法,但是我认为我已经正确实例化了Word.Application的对象,以便在Excel或Outlook中执行的VBA知道Options的含义。除了最后一行,它应该位于问题代码示例中的SetWith之间。

Dim wrapType As Long
Dim wordApp as Object

Set wordApp = EMailText.Application
wrapType = wordApp.Options.PictureWrapType
If wrapType <> wdWrapMergeInline Then
    wordApp.Options.PictureWrapType = wdWrapMergeInline
End If
'Do other things, then reset

wordApp.Options.PictureWrapType = wrapType