我可以发誓我过去曾剥夺过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将无法正常工作
答案 0 :(得分:4)
前提是有缺陷的:
myString = "ABC" & vbCrLf & "DEF"
该字符串由“ABC”,vbCrLf
和“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)
)个字符。就这么简单。