2017-03-17 116 views
1

行回车使用Excel V16插入Excel中的VBScript/VBA

我试图用一个回车,从而最终结果将是多行替换字符像波浪号〜格式的单元格文本。这实际上是多个行和列的单元格合并如下图所示

这是这所希望输出 enter image description here

这里是剧本,我用我的宏输入 enter image description here

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 

不幸的是我得到的是用波浪同一行删除 的单元格的格式与保鲜文本。不知道该从哪里出发。

+3

子程序的全部可以只用一行来代替:'表(“模板”)范围(“A34”)。 Value = Replacc(Sheets(“template”)。Range(“A34”)。value,“〜”,chr(10))'这会将单元格的值设置为自身,但用回车符替换波浪线。正如在下面的答案中提到的,如果你想分割头发,你可以使用'vbcrlf'来回车/换行或'chr(10)&chr(11)'。 – JNevill

+0

哇。工作。发布它作为答案,以便我可以选择它作为最佳响应 – Claus

回答

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)) 
+0

你有一个错字,它是'Replace',它是'chr(13)'用于回车。 – Stuart

+0

我应该提到的一个错字=取代你有双cc – Claus

+0

谢谢。更新。我总是得到这些chr()值倒退。更新了固定REPLACC的答案,用chr(13)交换了chr(10),所以这是一个回车而不是换行符。 – JNevill

3

一般情况下,在Windows中为newlines您需要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

+0

错误。在Excel单元格中需要vbLf(Chr(10)),这也是在使用UI(Alt + Enter)时插入的字符。vbCrLf只能工作,因为vbCr什么也不做,vbLf做这个工作。 – z32a7ul

+0

@ z32a7ul这似乎是一个普通的VBA字符串与Excel单元格问题。对于VBA/VB6中的通用字符串以及Access VBA等其他类型的字符串,您可以使用'vbCrLf',但在Excel单元格中'vbLf'就足够了。这可能是一个空间优化。如果你想在excel文件中使用这样一个多行字符串并将其写入文本文件,它似乎会导致复制问题,所以我猜这部分取决于你的目的。 –

+0

@ z32a7ul顺便说一句 - 感谢您的更正。我编辑了我的帖子以结合您的观点。 –