在Excel VBscript/VBA中插入换行符
使用excelv16 我试图在单元格中格式化文本,用回车符替换像tilde~这样的字符,这样完成的结果将是多行。这实际上是一个包含多行和多列的合并单元格,如下所示 这是输入 这是期望的输出 这是我在宏中使用的脚本在Excel VBscript/VBA中插入换行符,excel,vbscript,vba,Excel,Vbscript,Vba,使用excelv16 我试图在单元格中格式化文本,用回车符替换像tilde~这样的字符,这样完成的结果将是多行。这实际上是一个包含多行和多列的合并单元格,如下所示 这是输入 这是期望的输出 这是我在宏中使用的脚本 Sub FindReplaceAll() Sheets("Template").Select Range("A34").Select iStr = ActiveCell.Value For i = 1 To Len(iStr) I
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
不幸的是,我得到的是相同的线与瓷砖删除
单元格的格式为换行文本。不确定从这里走到哪里。通常,在Windows for中,您需要
vbCrLF
,而不是vbCr
。可以使用vbCrLf
或简单地使用vbLf
将多行字符串写入Excel单元格。如果使用Alt+enter
从用户界面输入这样的字符串,则执行后面的操作将直接对应于发生的情况
如果要对字符串执行其他操作而不是在单元格中显示它,则执行此操作可能会导致问题,例如将其写入文本文件或复制到剪贴板并粘贴到其他应用程序。例如,如果在单元格A1
中键入a Alt并输入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
,整个子例程可以替换为一行:
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))
整个子程序可以用一行代码替换:
Sheets(“template”).Range(“A34”).Value=Replacc(Sheets(“template”).Range(“A34”).Value“~”,chr(10))
将单元格的值设置为自身,但用回车符替换平铺。如以下答案所述,您可以使用vbcrlf
进行回车/换行,或者chr(10)&chr(11)
进行头发分割。哇。工作。把它作为答案贴出来,这样我就可以选择它作为最佳答案。你有一个拼写错误,它是Replace
,对于回车来说是chr(13)
。我应该提到的一个拼写错误=Replace你有两个字母。更新。我总是反向获取那些chr()值。更新了修复REPLACC的答案,将chr(10)替换为chr(13),因此它是回车,而不是换行。错误。在Excel单元格中需要vbLf(Chr(10)),这也是使用UI(Alt+Enter)时插入的字符。vbCrLf之所以有效,是因为vbCr不做任何事情,而vbLf做这项工作。@z32a7ul这似乎是VBA字符串与Excel单元格的一般问题。对于VBA/VB6中的通用字符串和Access VBA之类的东西,您可以使用vbCrLf
,但您可以正确地认为在Excel单元格中vbLf
就足够了。这可能是一种空间优化。如果您想在excel文件中获取这样一个多行字符串并将其写入文本文件中,似乎会导致复制问题,因此我想这部分取决于您的目的。@z32a7ul顺便说一句,谢谢您的更正。我编辑了我的文章,以纳入你的观点。