为什么VBA不能在Word和Excel中用CRLF替换函数

时间:2017-05-09 17:45:14

标签: vba replace chr

我可以发誓我过去曾剥夺过CRLF,但不确定为什么以下不起作用:

myString = "ABC" & vbCrLf & "DEF"
str1 = Replace(myString, vbLf, "")
str2 = Replace(str1, vbCrLf, "")
str3 = Replace(str2, vbNewLine, "") 
MsgBox str3

上面的代码不起作用,结果是:

ABC
DEF
myString = "ABC" & vbCrLf & "DEF"
str1 = Replace(myString, Chr(13), "")
str2 = Replace(str1, Chr(10), "")
MsgBox str2

上面的代码确实有效,结果是:

ABCDEF

解决方案:谢谢@Mat的答案(第一个代码的问题是我试图删除项目的顺序) VbCrLf& VbNewLine是相同的并且在删除VbLf后尝试删除组合vbCr + VbLf将无法正常工作

1 个答案:

答案 0 :(得分:4)

前提是有缺陷的:

myString = "ABC" & vbCrLf & "DEF"

该字符串由“ABC”,vbCrLf和“DEF”组成。

vbCrLfvbCrvbLf,在任何Windows框中都是vbNewLine

当你这样做时:

str1 = Replace(myString, vbLf, "")

您替换vbLf 并保留vbCr个字符

str2 = Replace(str1, vbCrLf, "")

然后您替换vbCrLf ,但vbLf已经消失,因此vbCrLf不在字符串中。

str3 = Replace(str2, vbNewLine, "") 

然后你替换基本上与前一条指令完全相同的vbNewLine,结果是一个被剥离vbLf 但仍包含vbCr的字符串

此代码按预期工作:

Sub Test()
    Dim foo As String
    foo = "foo" & vbCrLf & "bar"
    Debug.Print foo
    foo = Replace(foo, vbNewLine, vbNullString)
    Debug.Print foo
End Sub

就像这样:

Sub Test()
    Dim foo As String
    foo = "foo" & vbNewLine & "bar"
    Debug.Print foo
    foo = Replace(foo, vbNewLine, vbNullString)
    Debug.Print foo
End Sub

或者这个:

Sub Test()
    Dim foo As String
    foo = "foo" & vbNewLine & "bar"
    Debug.Print foo
    foo = Replace(foo, vbCrLf, vbNullString)
    Debug.Print foo
End Sub

甚至这个:

Sub Test()
    Dim foo As String
    foo = "foo" & vbNewLine & "bar"
    Debug.Print foo
    foo = Replace(foo, vbCr, vbNullString)
    foo = Replace(foo, vbLf, vbNullString)
    Debug.Print foo
End Sub

您的第二个代码段按预期工作,因为您执行删除了vbCrChr(13))和vbLfChr(10))个字符。就这么简单。