前提是有缺陷的:
myString = "ABC" & vbCrLf & "DEF"
该字符串由“ABC”、vbCrLf
“DEF”和“DEF”组成。
vbCrLf
是vbCr
和vbLf
,在任何 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
您的第二个片段按预期工作,因为您确实删除了vbCr
( Chr(13)
) 和vbLf
( Chr(10)
) 字符。就那么简单。