【问题标题】:Replace line break in email using Replace()使用 Replace() 替换电子邮件中的换行符
【发布时间】:2016-01-07 22:04:41
【问题描述】:

正在尝试通过 Excel 使用 VBA 自动化 Outlook 电子邮件。

在我的代码末尾,我在 Excel 单元格中有一个值字符串,由 ;# 分隔(例如:;#abacus;#bicycle;#cheese;#)。

进入电子邮件创建部分的 .HTMLBody 部分后,我将使用 Replace() 删除分隔符。

.HTMLBody = Replace(.HTMLBody, ";#", ", ")

这很棒,因为它用逗号分隔列表。我还有另一个处理开头的部分(列表开头之前的;#)。这会查找“List:”的特定实例

.HTMLBody = Replace(.HTMLBody, "List: , ", "List:")

现在应该改为:“列表:算盘、自行车、奶酪,”

我现在正在尝试删除列表末尾的多余逗号和空格(“奶酪”应以“奶酪”结尾)。列表中总会有不同长度的不同值,不一定以奶酪结尾,但根据值分隔符总是以;#结尾。

我知道最后一个值总是在电子邮件中返回< br >,但是当我尝试此代码时,它不起作用(换行符在括号中包含空格以不破坏代码块,它们不会在我真正的 VBA 代码中):

.HTMLBody = Replace(.HTMLBody, ", < br >< br >", "< br >< br >")

基于我疯狂的替换值系统(在这种情况下,目标是替换 3 次),我觉得它应该可以工作,但事实并非如此。

VBA 是否无法搜索带有换行符的字符串并将其替换为仅换行符?

我也觉得有更好的方法来做到这一点 - 我的 VBA 充其量是次品。

【问题讨论】:

  • 尝试 .HTMLBody = Left(.HTMLBody, len(.HTMLBody)-2) 去掉尾随的逗号和空格。不确定我是否理解问题的第二部分。
  • &lt;br&gt; 是 HTML 中的换行符。但是chr(13)+chr(10)vbCrLf 是您在VBA 中表示回车+换行的方式。也许试试那些?
  • 任何机会你都可以显示整个 HTML 字符串(作为原始 HTML)——或者至少是一个样本来覆盖开始、结束和被修改的区域,无论是原样还是你想要的看起来像?

标签: vba excel email line-breaks


【解决方案1】:

GD 克里斯,

看来你是反过来解决问题的? 此外,您将起始字符串指定为:

";#abacus;#bicycle;#cheese;#"

但您在第二个“替换”步骤中指出还有一个值存在“列表:”?这应该是初始字符串的一部分,否则在第二个 Replace 语句中找不到它?

无论如何假设您的初始字符串是:

"List:;#abacus;#bicycle;#cheese;#"

您的目标是操作此字符串来构建 .HTMLbody 组件。

这可以通过基于分隔符“;#”拆分字符串来轻松完成

并按照以下方式重建非空字符串,其中 s 将是您的起始字符串:

Function HTMLBody(s As String) As String

    Dim b As String

    s = Replace(s, "List:", vbNullString)   'Removes the "List:" section
    aStr = Split(s, ";#")    'Split the string in an array through the ";#" delimiter

    For Each a In aStr    'Loop through all array values
        If Not a = vbNullString Then   'Test if array value is not empty
            If b = vbNullString Then   'Test if b is 'uninitialised' to allow addition of first item without the ","
                b = a
            Else
                b = b & "," & a
            End If
        End If
    Next

    b = "List:" & b     'Add "List:" back onto the build string

    HTMLBody = b    'Set the HTMLBody() return value

End Function

然后您可以通过以下方式调用“HTMLBody”函数:

Sub callHTMLBody()

    .HTMLbody = HTMLBody("List:;#abacus;#bicycle;#cheese;#")

End Sub

这应该让你正确的字符串操作?

【讨论】:

  • 感谢您对 mtholen 的所有帮助。我不知道分隔符的拆分功能(呃!)。最终使用该部分和您的格式化循环来处理列表项之间的逗号。非常感谢!
猜你喜欢
  • 2017-12-11
  • 2012-07-28
  • 2016-03-30
  • 1970-01-01
  • 2011-03-13
  • 2012-04-02
  • 1970-01-01
  • 2011-05-01
  • 2015-06-18
相关资源
最近更新 更多