8

我在 VBA 中有一个生成字符串数组的函数。从另一个 VBA 函数调用时它工作正常,但从工作表调用时却不行。

以下是它应该如何使用:

  • 选择 A1:A3
  • 写在公式栏中=Test(),然后点击Ctrl-Shift-Enter使其成为数组函数
  • A1 应该包含A, A2 应该包含B, A3 应该包含C

当我实际尝试这个时,它会放入A数组的所有三个单元格。如何将返回的数据Test放入数组的不同单元格中?


对于那些想看到它的人,这里是函数的代码。请记住,从其他函数调用该函数时可以正常工作。

Function Test() As String()
    Dim a(1 To 3) As String
    a(1) = "A"
    a(2) = "B"
    a(3) = "C"
    Test = a
End Function
4

4 回答 4

9

如果您转置数据,您的功能可以正常工作。为此,您需要Variant()代替String()

Function Test() As Variant()
    Dim a(1 To 3) As Variant
    a(1) = "A"
    a(2) = "B"
    a(3) = "C"
    Test = Application.Transpose(a)
End Function
于 2012-04-24T01:57:01.970 回答
4

您可能想查看Chip Pearson 关于从 UDF 返回数组的建议

这是我在这里的第一反应。我希望这不是不合适的。

于 2012-04-24T02:00:07.927 回答
3

我发现总是使用二维数组最简单,然后你不需要转置等

Function Test() As String()
    Dim a(1 To 3, 1) As String
    a(1, 1) = "A"
    a(2, 1) = "B"
    a(3, 1) = "C"
    Test = a
End Function
于 2012-04-24T07:33:01.007 回答
0

刚刚发现了问题——从 VBA 到 Excel 的数组的第一个维度是水平的,而不是垂直的。要查看 的输出Test,请将数组函数=Test()放在A1:C1(不是 A1:A3)中。

于 2012-04-24T01:57:00.923 回答