vba函数:用换行符返回string

首先,新的VBA。

我正在实施这个解决scheme如何合并所有列的单元格在Excel中[stackoverflow] ,但有一个后续。

A1:I A2:am A3:a A4:boy 

我的输出是: Iamaboy但我想在一个单元格中:

 I am a boy 

函数似乎不会返回string与vbNewLinevbNewLine chr(10)vbNewLine chr(13)

一行代码:

 Range("B1").Formula = join(application.transpose(Range("A1:A4")),vblf) 

尝试使用这个

 Sheet1.Range("A1").Value = "sgar" & Chr(10) & "saha" 

只需使用CHAR(10)分隔符:

 =ConcatenateRange(A1:A4;CHAR(10)) 

使用:

 =A1&"[Alt+Enter]"&A2&"[Alt+Enter]"&A3&"[Alt+Enter]"&A4 

答案就像tlewin所说的那样

 =ConcatenateRange(A1:A4,CHAR(10)) 

或者,使用[alt-enter],你可以这样写

 =ConcatenateRange(A1:A4," ") 

“但是等等,”你说,“我试过了,这不起作用!”
那么,你看,当你在Excel中手动input像I[alt-enter]am[alt-enter]a[alt-enter]boy ,甚至执行一个语句如[A1] = "I" & vbNewLine & "am" Excel会自动更改单元格格式并打开自动换行。 换行符需要在换行符中显示。 但是,如果从UDF中返回带有换行符的string,则Excel不会更新格式。

我可以想到两个可能的解决scheme:

  1. 手动启用任何使用此function的单元格的自动换行
  2. (不build议)在ConcatenateRange UDF调用期间将引用存储在Application.Caller中,然后设置一个Application.OnTime(now, "AddWordWrap")称为Application.OnTime(now, "AddWordWrap")调用并编写AddWordWrap子例程,以便它使用存储的引用将wordwrap格式添加到单元格(这是因为你不能在UDF中更新单元格的格式)。 这种方法是越野车和问题。

我坚持这一点,它一旦我使用'包装文本'的工作。