【问题标题】:VBA Outlook - Replace Paragraph Mark With Manual Line BreakVBA Outlook - 用手动换行符替换段落标记
【发布时间】:2012-12-06 16:18:13
【问题描述】:

尊敬的 Stackoverflow 员工,

我想用手动换行符(^ l).
我无法通过 Google 找到解决方案,但我可能搜索错误。

我对每封收到的电子邮件都使用以下代码作为规则:
(仅供参考,此代码适用于文本)

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 的情况下转换它,它将有所有这些额外的空行。

例子:
有人愿意帮助我吗?
我真的很感激!

问候,

克里斯

【问题讨论】:

  • 您确定^p 是2 个字符,而不仅仅是1 的表示吗? ^ 可以表示控制键,^p 相当于 ctrl+p (chr(21))
  • 我不太确定。尽管如此,当使用普通的查找和替换时,它确实可以通过将 ^p 更改为 ^l 来工作。此外,当我打开电子邮件的源代码时,它不会保存为 ^p 或 ^l,因为它是 HTML 格式的。收到的电子邮件也将采用 HTML 格式,并由

    代码替换。我目前有一个修复程序,但我认为它不适用于每封电子邮件。

  • 用 chr,你不需要双引号,即,你应该使用Replace(MyMail.HTMLBody, chr(13), chr(10))
  • @Kris 尝试我的解决方案运气好吗?

标签: html vba outlook replace plaintext


【解决方案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

【讨论】:

  • 感谢您的回复,但是我今天不在,所以无法尝试。明天早上我会做第一件事。
  • @Kris 没问题,享受你的假期
  • 大家好,很抱歉耽搁了这么久。圣诞节和所有的一切都是忙碌的一周:D(顺便说一句圣诞快乐)。我试过你的代码,效果很好!再次感谢您的大力帮助。
猜你喜欢
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 2011-03-18
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多