VBA Outlook - 用手动换行符替换段落标记

时间:2012-12-19 10:27:45

标签: html vba outlook replace plaintext

亲爱的Stackoverflow人员,

我想用每个 传入 电子邮件替换段落标记(^ pi相信,至少在outlook Find& Replace中)与手动换行符( ^ 1)。
我无法通过谷歌找到解决方案,但我可能会发现错误。

我使用以下代码作为每个传入电子邮件的规则:
(仅供参考,此代码可以正常使用文本)

Sub testing(MyMail As MailItem)
 MyMail.HTMLBody = Replace(MyMail.HTMLBody, "example", "changedtext")
 MyMail.Save
End Sub

现在我尝试将第二行更改为:

MyMail.HTMLBody = Replace(MyMail.HTMLBody, "^p", "^l")

MyMail.HTMLBody = Replace(MyMail.HTMLBody, "chr(13)", "chr(10)")

但这些似乎不起作用。

不幸的是,我对VBA编码不是很熟悉。 我刚刚被告知我需要使用chr(),但我不知道如何做到这一点。


一些背景资料:
我使用2个规则,1使用^ l更改每个^ p,另一个规则是将电子邮件从HTML转换为纯文本。
如果我只是转换它而不首先用^ l更改^ p它将具有所有这些额外的空行。

例:
Example of HTML & when converted to plaintext 有人愿意帮我这个吗? 我真的很感激!

此致

克里斯

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到,但都具有相同的副作用。 如果用户按住SHIFT + ENTER 2次,它们将导致1个新行

解决方案1: '将2个换行符替换为1个换行符

'vbCrLf is actually Chr(13) & Chr(10)

mail.HTMLBody = Replace(mail.HTMLBody, vbCrLf & vbCrLf, vbCrLf)

解决方案2: '将任何额外的换行替换为“” 最后会有一个额外的空白链接

tmp = Split(mail.HTMLBody, vbCrLf)
For Each Line In tmp
    If Line <> "" Then
        newBody = newBody  & Line & vbCrLf
    End If
Next
mail.HTMLBody = newBody