使用Text而不是Value创建变体数组

Sam*_*Sam 5 excel vba excel-vba

您可以从如下范围创建变量数组:

Dim x As Variant

x = Range("A1:Z1").Value
Run Code Online (Sandbox Code Playgroud)

这显然会将.Value属性放入数组中.我试图做同样的事情,但获得.Text细胞的属性,但我不认为这是可能的.

Dim x As Variant

x = Range("A1:Z1").Text '// <~~ type mismatch
Run Code Online (Sandbox Code Playgroud)

原因如下,我有一行数据如下:

  |------A------|------B------|------C------|
 1| 01-Jan-2003   27-Feb-2005   15-Sep-2015
Run Code Online (Sandbox Code Playgroud)

我想将行输出到带有管道分隔符的文本文件,目前我正在使用它:

With WorksheetFunction
    x = .Transpose(.Transpose(Cells(1, 1).Resize(1, 3).Value))
End With

Print #1, Join(x, "|")
Run Code Online (Sandbox Code Playgroud)

哪个有效,但是它的.Value格式为dd/mm/yyyy,所以输出如下所示:

01/01/2003|27/02/2005|15/09/2015
Run Code Online (Sandbox Code Playgroud)

问:我是否可以使用此方法保留格式,而无需先解析/循环数组中的每个值?

Jor*_*dan 2

不是很优雅,我不确定这在批量工作中效果如何,但它避免了循环。您可以将最终输出放入字符串中并替换:

Dim x As Variant, y As String

x = Range("A1:Z1")

With WorksheetFunction
    x = .Transpose(.Transpose(ActiveSheet.Cells(1, 1).Resize(1, 5).Value))
End With

y = Join(x, "|")

y = Replace(y, "/01/", "-Jan-")
y = Replace(y, "/02/", "-Feb-")
y = Replace(y, "/03/", "-Mar-")
y = Replace(y, "/04/", "-Apr-")
y = Replace(y, "/05/", "-May-")
y = Replace(y, "/06/", "-Jun-")
y = Replace(y, "/07/", "-Jul-")
y = Replace(y, "/08/", "-Aug-")
y = Replace(y, "/09/", "-Sep-")
y = Replace(y, "/10/", "-Oct-")
y = Replace(y, "/11/", "-Nov-")
y = Replace(y, "/12/", "-Dec-")

Debug.print y
Run Code Online (Sandbox Code Playgroud)