5

使用这个非常简单的功能:

Function WriteArray() as Variant
 Dim array(0 To 2)
 array(0) = "A"
 array(1) = "B"
 array(2) = "C"
 WriteArray = array
End Function

我期待在我的 Excel 电子表格中看到整个数组的结果,但事实并非如此:我只得到第一个字符串。我知道在电子表格中显示整个数组是有技巧的(通过使用公式 + F2 + CTRL+SHIFT+ENTER 选择一系列单元格),但我更喜欢 VBA 来处理这一切。

我还尝试使用 Application.Caller 变量直接在“Caller”范围内写入,但代码中断。

非常感谢你的帮助!

编辑:这是我尝试使用的另一个代码:

Function WriteArray() As Variant
     Dim arr(0 To 2)
     arr(0) = "A"
     arr(1) = "B"
     arr(2) = "C"
     WriteArray = arr
     Dim StartRow, i As Integer
     For i = 0 To UBound(arr)
        Range("A" & i).Value = arr(i)
     Next
End Function

它在“Range(“A”&i).Value = arr(i)”行处中断。我的 Excel 坏了吗?!

4

4 回答 4

6

以下代码将数组精美地写入一系列单元格:

Function WriteArray() As Variant
    Dim AbcList(0 To 2) as Variant
    AbcList(0) = "A"
    AbcList(1) = "B"
    AbcList(2) = "C"
    WriteArray = AbcList
End Function

Function WriteArrayToSpreadsheet()
    Dim MyArray As Variant
    MyArray = WriteArray()

    Dim StartRow, i As Integer
    StartRow = 1
    For i = 0 To UBound(MyArray)
        Range("A" & i + StartRow).Value = MyArray(i)
    Next
End Function

话虽如此,我希望看到您实际尝试将其放入电子表格的代码部分,而不是您构建数组的位置。那我可以帮你!

于 2009-05-11T04:15:18.240 回答
3

您不能直接从 Excel 中的工作表函数写入非调用方单元格。

如果要使用数组函数(使用 Shift-Ctrl-Enter),则需要将代码更改为:

Function WriteArray() As Variant
    Dim arr(0 To 2, 0 To 1)
    arr(0, 0) = "A"
    arr(1, 0) = "B"
    arr(2, 0) = "C"
    WriteArray = arr
End Function

如果您想在调用单元格之外写入,则需要实现某种形式的回调,该回调将使用自动化来写入其他单元格。这要复杂得多,而且更有可能破坏!

于 2009-05-14T08:41:39.083 回答
1

秘诀是定义一个二维数组。数组的二维只是需要为数据集定义的范围。第一个数组维度是行偏移量,第二个维度是列偏移量。

在您的示例中,第二个维度只是没有“使用”:

 Sub Ente()

   Dim myArray(0 To 3, 0) As String
   myArray(0, 0) = "A"
   myArray(1, 0) = "B"
   myArray(2, 0) = "C"

   Range("B7:B" & UBound(myArray) + 6) = myArray

End Sub

所以,不需要循环!简单快速。

于 2015-05-12T18:50:08.347 回答
0

到目前为止,我所做的最好的解决方法是创建一个程序来获取您的范围引用和您的数组,并将其用作水平或垂直显示数据的起点......

如下:

Sub LoadArray(ByRef oRange, ByRef vArray)
    Dim I
    For I = 0 To UBound(vArray)
        oRange.Offset(I, 0).Value = vArray(I)
    Next
End Sub

'How to call:
Dim anyArray
anyArray = Array(1,2,3)

Call LoadArray(Range("anyRange"), anyArray)

希望能帮助到你。

于 2013-07-25T16:32:39.293 回答