Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Excel VBscript/VBA中插入换行符_Excel_Vbscript_Vba - Fatal编程技术网

在Excel VBscript/VBA中插入换行符

在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

使用excelv16

我试图在单元格中格式化文本,用回车符替换像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
不幸的是,我得到的是相同的线与瓷砖删除
单元格的格式为换行文本。不确定从这里走到哪里。

通常,在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顺便说一句,谢谢您的更正。我编辑了我的文章,以纳入你的观点。