使用 Replace() 替换电子邮件中的换行符

Replace line break in email using Replace()

正在尝试通过 VBA 到 Excel 自动处理 Outlook 电子邮件。

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

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

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

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

的特定实例
.HTMLBody = Replace(.HTMLBody, "List: , ", "List:")

现在应该是:"List: abacus, bicycle, cheese, "

我正在尝试删除列表末尾的多余逗号和 space("cheese, " 应以 "cheese" 结尾)。列表将始终具有不同长度的不同值,不一定以奶酪结尾,但总是基于值分隔符以 ;# 结尾。

我知道电子邮件中的最后一个值总是跟在 return < br > 之后,但是当我尝试此代码时,它不起作用(换行符包括 space括号内是为了不破坏代码块,它们不在我的真实 VBA 代码中):

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

基于我疯狂的替换值系统(在本例中,目标是替换三次),我觉得它应该有效,但它没有。

难道VBA不能搜索带有换行符的字符串并用换行符替换它吗?

我也觉得有更好的方法来做到这一点 - 我的 VBA 充其量只是粗制滥造。

GD 克里斯,

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

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

但您在第二个 'Replace' 步骤中指出还存在一个值 "List:" ?这应该是初始字符串的一部分,否则在第二个 Replace 语句中找不到它?

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

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

你的 objective 是操纵这个字符串来构建 .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

这应该能让您正确地进行字符串操作?