使用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操作?