![如何使用 VBA 替换 Outlook 2013 中传入邮件正文中的文本而不丢失格式](https://linux22.com/image/1606977/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20VBA%20%E6%9B%BF%E6%8D%A2%20Outlook%202013%20%E4%B8%AD%E4%BC%A0%E5%85%A5%E9%82%AE%E4%BB%B6%E6%AD%A3%E6%96%87%E4%B8%AD%E7%9A%84%E6%96%87%E6%9C%AC%E8%80%8C%E4%B8%8D%E4%B8%A2%E5%A4%B1%E6%A0%BC%E5%BC%8F.png)
这个帖子讨论了使用 Outlook 规则替换传入电子邮件中的文本的 VBA 解决方案。
我使用相同的方法从收到的电子邮件顶部删除了“外部消息”文本(它实际上是雇主插入的两行文本,真的很烦人)。但是,当 VBA 进行替换时,生成的电子邮件也会更改电子邮件的格式。文本按预期替换(很棒!),但电子邮件中的所有超链接都被展开,并且所有其他 html 格式都丢失了(不好)。看起来它已被转换为纯文本。有没有办法在 Outlook 中替换传入消息的文本而不丢失 HTML 格式?
这是我正在运行的代码:
Sub RemoveExternalText(MyMail As MailItem)
Dim body As String, re As Object, match As Variant
body = MyMail.body
Set re = CreateObject("vbscript.regexp")
re.Pattern = "External Message"
For Each match In re.Execute(body)
body = Replace(body, match.Value, "")
Next
MyMail.body = body
MyMail.Save
End Sub
答案1
在阅读有关使用 VBA 创建 HTML 电子邮件时,我发现他们没有使用“MyMail.body”,而是使用“MyMail.HTMLbody”。
使用该语法更改代码即可解决问题!
Sub RemoveExternalText(MyMail As MailItem)
Dim body As String, re As Object, match As Variant
body = MyMail.HTMLBody
Set re = CreateObject("vbscript.regexp")
re.Pattern = "External Message"
For Each match In re.Execute(body)
body = Replace(body, match.Value, "")
Next
MyMail.HTMLBody = body
MyMail.Save
End Sub