Vba Can';t分配给数组,自定义函数

Vba Can';t分配给数组,自定义函数,vba,excel,Vba,Excel,我有一个创建并返回数组的函数: Function test() Dim resultArray(1 To 3, 1 To 2) As Variant Set resultArray(1, 1) = ThisWorkbook.Worksheets("setup").Range("A1:A1000") Set resultArray(2, 1) = ThisWorkbook.Worksheets("setup").Range("B1:B1000") Set

我有一个创建并返回数组的函数:

Function test() 
     Dim resultArray(1 To 3, 1 To 2) As Variant
     Set resultArray(1, 1) = ThisWorkbook.Worksheets("setup").Range("A1:A1000")
     Set resultArray(2, 1) = ThisWorkbook.Worksheets("setup").Range("B1:B1000")
     Set resultArray(3, 1) = ThisWorkbook.Worksheets("setup").Range("C1:C1000")

     Set resultArray(1, 2) = ThisWorkbook.Worksheets("setup").Range("D1:D1000")
     Set resultArray(2, 2) = ThisWorkbook.Worksheets("setup").Range("E1:E1000")
     Set resultArray(3, 2) = ThisWorkbook.Worksheets("setup").Range("F1:F1000")


     test=resultArray
End Function

Sub testTestFunction()
     Dim storedRanges() As Variant 'works fine
     'Dim storedRanges(1 To 3, 1 To 2) As Variant 'error on the next line
     storedRanges=test()  
     MsgBox ("DONE")
End Sub

我尝试将初始化方法
Dim storedRanges()作为Variant
Dim storedRanges(1到3,1到2)作为Variant
,只有前者有效。为什么会发生这种情况?

将要填充的数组作为参数
ByRef
传递给过程可能符合您的需要:

子测试()
Dim storedRanges(1到3,1到2)作为对象
普特兰奇酒店
端接头
子PutRanges(q()作为对象)
使用此工作簿。工作表(“设置”)
设置q(1,1)=.范围(“A1:A1000”)
设置q(2,1)=.范围(“B1:B1000”)
设置q(3,1)=.范围(“C1:C1000”)
设置q(1,2)=.范围(“D1:D1000”)
设置q(2,2)=.范围(“E1:E1000”)
设置q(3,2)=.范围(“F1:F1000”)
以
端接头

我使用了动态数组,而不是静态分配的数组:

Function test() As Variant()
     Dim resultArray() As Variant
     ReDim resultArray(1 To 3, 1 To 2)
     Set resultArray(1, 1) = ThisWorkbook.Worksheets("setup").Range("A1:A1000")
     Set resultArray(2, 1) = ThisWorkbook.Worksheets("setup").Range("B1:B1000")
     Set resultArray(3, 1) = ThisWorkbook.Worksheets("setup").Range("C1:C1000")

     Set resultArray(1, 2) = ThisWorkbook.Worksheets("setup").Range("D1:D1000")
     Set resultArray(2, 2) = ThisWorkbook.Worksheets("setup").Range("E1:E1000")
     Set resultArray(3, 2) = ThisWorkbook.Worksheets("setup").Range("F1:F1000")


     test = resultArray
End Function

Sub testTestFunction()
     Dim storedRanges() As Variant 'works fine
     'Dim storedRanges(1 To 3, 1 To 2) As Variant 'error on the next line
     storedRanges = test()
     MsgBox ("DONE")
End Sub

结果是您所期望的。

您的代码甚至不应该编译,您定义了两次相同的变量(storedRanges)@Vincent G,修复了这个问题,现在它可以编译了。好的,考虑到它可以编译,它在这里工作。您正在(3,2)大小数组的(1,1)位置存储对范围的引用。@Vincent G,这有关系吗?数组的其余部分只是空的。分配数组时,赋值的左侧必须是可变的,不能在赋值的左侧有一个静态大小的数组。