使用Excel v16
我正在尝试通过使用回车替换像tilde~这样的字符来格式化单元格中的文本,其中完成的结果将是多行。这实际上是多行和多列的合并单元格,如下所示
这是我在宏中使用的脚本
Sub FindReplaceAll()
Sheets("Template").Select
Range("A34").Select
iStr = ActiveCell.Value
For i = 1 To Len(iStr)
If Mid(iStr, i, 1) = "~" Then
rtStr = rtStr + vbCr
Else
rtStr = rtStr + Mid(iStr, i, 1)
End If
Next i
ActiveCell.Value = rtStr
End Sub
不幸的是,我得到的所有内容都与删除了代字号相同 使用换行文本格式化单元格。不知道从哪里开始。
答案 0 :(得分:5)
您的整个子程序只能用一行代替:
sub findReplaceAll()
Sheets("template").Range("A34").Value = Replace(Sheets("template").Range("A34").value, "~", chr(13))
end sub
这会将单元格的值设置为自身,但用回车符替换波浪号。正如在@ johncoleman的回答中所提到的,你可以使用vbcrlf
作为回车符/换行符,或者chr(13) & chr(10)
如果你想拆分头发。
这也可以在工作表公式中完成:
=SUBSTITUTE(A34, "~", CHAR(13))
答案 1 :(得分:4)
通常,在newlines的Windows中,您需要vbCrLF
而不是vbCr
。可以使用vbCrLf
或简单vbLf
将多行字符串写入Excel单元格。如果您使用Alt+Enter
从用户界面输入此类字符串,则执行后续操作会直接对应。
如果您打算对字符串执行其他操作而不是在单元格中显示该字符串,则执行此操作可能会导致问题,例如将其写入文本文件或将其复制到剪贴板并将其粘贴到其他应用程序。例如,如果您在单元格A1
中输入a Alt+Enter b
,则会在a
上直接显示b
,但如果您运行以下代码:
Sub test()
Dim FSO As Object
Dim f As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = FSO.CreateTextFile("C:/programs/test.txt")
f.Write Range("A1").Value
f.Close
End Sub
然后在记事本中检查文件,不会显示换行符。出于这些原因,我在VBA中构建多行字符串时几乎总是使用vbCrLf
。
因此 - 如果您只想显示字符串,请使用chr(10)
或vbLf
,但您可能希望稍后在其他位置使用此字符串,请使用vbCrLf
。