【问题标题】:Inserting a line return in Excel VBscript / VBA在 Excel VBscript / VBA 中插入换行符
【发布时间】:2017-03-17 23:08:43
【问题描述】:

使用 Excel v16

我正在尝试通过用回车替换像波浪号 ~ 这样的字符来格式化单元格中的文本,从而完成的结果将是多行。这实际上是一个多行多列的合并单元格,如下图

这是输入

这是所需的输出

这是我在宏中使用的脚本

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

不幸的是,我得到的只是去掉波浪号的同一行 单元格使用换行文本进行格式化。不知道从这里去哪里。

【问题讨论】:

  • 整个子程序可以只用一行替换:Sheets("template").Range("A34").Value = Replacc(Sheets("template").Range("A34").value, "~", chr(10)) 这会将单元格的值设置为自身,但用回车替换波浪号。正如下面的答案中提到的,您可以使用vbcrlf 进行回车/换行,如果您想分叉,可以使用chr(10) & chr(11)
  • 哇。工作。将其发布为答案,以便我将其选为最佳回复

标签: excel vbscript vba


【解决方案1】:

你的整个子程序可以只用一行替换:

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

【讨论】:

  • 你打错了,是Replace,回车是chr(13)
  • 我应该提到的一个错字 = 替换你有一个双 cc
  • 谢谢两位。更新。我总是把那些 chr() 值倒过来。更新了修复 REPLACC 的答案,将 chr(10) 与 chr(13) 交换,因此它是回车而不是换行。
【解决方案2】:

通常,在 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

【讨论】:

  • 错了。 Excel 单元格中需要 vbLf (Chr(10)),这也是使用 UI 时插入的字符(Alt+Enter)。 vbCrLf 之所以起作用,只是因为 vbCr 什么都不做,而 vbLf 做了。
  • @z32a7ul 这似乎是一般 VBA 字符串与 Excel 单元格的问题。对于 VBA/VB6 中的通用字符串和 Access VBA 之类的东西,您可以使用 vbCrLf,但您是正确的,在 Excel 单元格中 vbLf 就足够了。这可能是空间优化。如果您想在 excel 文件中获取这样的多行字符串并将其写入文本文件,它似乎确实会导致复制问题,所以我想这部分取决于您的目的。
  • @z32a7ul 顺便说一句——感谢您的更正。我编辑了我的帖子以纳入您的观点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
相关资源
最近更新 更多