为什么 VBA 替换函数在 Word 和 Excel 中不能使用 CRLF
Why Doesn't VBA replace function work with CRLF in Word and Excel
我可以发誓我过去已经剥离了 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 将不起作用
前提有缺陷:
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)
) 人物。就这么简单。
我可以发誓我过去已经剥离了 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 将不起作用
前提有缺陷:
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)
) 人物。就这么简单。