使用 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
这应该能让您正确地进行字符串操作?
正在尝试通过 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
这应该能让您正确地进行字符串操作?