使用Replace()replace电子邮件中的换行符
尝试通过Excel使用VBA自动化Outlook电子邮件的过程。
在我的代码的末尾,我在Excel单元格中分隔了一个值的string;#
(例如: ;#abacus;#bicycle;#cheese;#
)。
一旦我到达电子邮件创build部分的.HTMLBody部分,我将使用Replace()来删除分隔符。
.HTMLBody = Replace(.HTMLBody, ";#", ", ")
这是很好的,因为它用逗号分隔列表。 我还有另外一个处理开始的部分(在我的列表开始之前的;#
)。 这将查找“List:”的特定实例
.HTMLBody = Replace(.HTMLBody, "List: , ", "List:")
现在应该是:“清单:算盘,自行车,奶酪”
我试图在列表结束后删除额外的逗号和空格(“cheese”应该以“cheese”结尾)。 列表将始终有不同的值,其中不同的长度,不一定以奶酪结束,但总是以;#
分隔符结尾。
我知道最后一个值总是跟在电子邮件中的返回值,但是当我尝试这个代码时,它不起作用(换行符已经包含括号内的空格来不破坏代码块,它们不在我的真实VBA代码):
.HTMLBody = Replace(.HTMLBody, ", < br >< br >", "< br >< br >")
基于我疯狂的replace价值体系(在这种情况下,旨在取代三次),我觉得它应该工作,但事实并非如此。
VBA是不是能够search带有换行符的string,并用换行符来replace它?
我也觉得有一个更好的方法来做到这一点 – 我的VBA充其量是粗制滥造。
GD克里斯,
看来你反过来解决这个问题了吗? 此外,你指明你的起始string是:
";#abacus;#bicycle;#cheese;#"
然而,你在第二个“replace”步骤中指出,还有一个值为“List:”? 这应该是初始string的一部分,否则它不能在第二个replace语句中find?
无论如何,假设你的初始string是:
"List:;#abacus;#bicycle;#cheese;#"
你的目标是操纵这个string来构build.HTMLbody组件。
这可以很容易地通过分割string基于分隔符“;#”
并按照下面的方式重build非空string,其中s将是您的起始string:
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
这应该让你正确的string操作?