我有一份每天发送的报告。
在其中有一个链接的图像,该图像指向我需要粘贴到电子邮件中并发送的范围。
我已将电子邮件另存为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,所以请耐心等待。
答案 0 :(得分:2)
默认情况下,粘贴图像时,Word将使用“文件/选项/高级”中“插入,粘贴图片”部分的“剪切,复制和粘贴”设置。因此,在某些计算机上,图像可能会粘贴为InlineShape,而在其他计算机上可能会粘贴为Shape。
如果仅粘贴代码,然后使用PasteSpecial
,则可以使用wdFloatOverText或wdInLine的相应WdOLEPlacement枚举值来指定内联或文本换行。
由于粘贴命令来自^c
替换文本,因此这种方法不适用于这种情况。这意味着需要更改“选项”设置。并且,为了使它易于使用,在代码末尾应将其改回。
下面是一些示例代码,演示了如何检查当前选项,如有必要,请进行更改,然后在过程结束时进行重置。我不熟悉通过Outlook对象模型使用Word的方法,但是我认为我已经正确实例化了Word.Application
的对象,以便在Excel或Outlook中执行的VBA知道Options
的含义。除了最后一行,它应该位于问题代码示例中的Set
和With
之间。
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