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,这有关系吗?数组的其余部分只是空的。分配数组时,赋值的左侧必须是可变的,不能在赋值的左侧有一个静态大小的数组。