好的。我认为您可能根本没有正确分配数组y
。正如我在评论中提到的:
y(k) = x(i,j)
仅将 i/j 坐标表示的值存储在x
数组中。
为了当时y(k)
引用整个数组x
,您将执行以下操作:
y(k) = x
如果仍然无法正常工作,那么可能还有其他不正确的地方。这是一个示例,其中我有一个名为 2x2(以 0 为底)的数组baseArray
,我显式地填充了一些值。我从i = 0 to itLimit
迭代,在每次迭代中,我迭代数组中的项目,将值乘以 2,并存储在数组变量tmpArray
中。值转换后,我将它们存储在 中arrContainer
,然后进行下For i = 0 to itLimit
一次迭代。
Sub FunWithArrays()
Dim itLimit As Integer '## Iteration limit.'
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim baseArray(2, 2) As Variant '## an example array.'
'## Put some dummy data in this array.'
baseArray(0, 0) = 1
baseArray(0, 1) = 65
baseArray(0, 2) = 13
baseArray(1, 0) = 14
baseArray(1, 1) = 29
baseArray(1, 2) = 44
baseArray(2, 0) = 9
baseArray(2, 1) = 16
baseArray(2, 2) = 33
Dim tmpArray(2, 2) As Variant '## This will temporarily hold values as we transform them.'
Dim arrContainer() As Variant '## an array of arrays, to store the iteration arrays.'
itLimit = 2 '## set a max iteration.'
For i = 0 To itLimit
'## Transform the base array somehow'
For j = LBound(baseArray, 1) To UBound(baseArray, 1)
For k = LBound(baseArray, 2) To UBound(baseArray, 2)
tmpArray(j, k) = baseArray(j, k) * 2
Next
Next
ReDim Preserve arrContainer(i)
arrContainer(i) = tmpArray
Next
Dim y As Variant
'## Now, refer to a single iteration stored in the arrContainer variable:
y = arrContainer(2)
End Sub
在第一个屏幕截图中,我使用Locals
窗口查看变量及其包含的内容。在第一次迭代之后,您可以看到tmpArray
已填充,并且与 的维度相同baseArray
,但其中的值已乘以 2。
检查arrContainer
变量,我们看到它只有 1 个项目,并且该项目是一个数组,等于tmpArray
我们在上面的迭代中创建的那个。
在最后一次迭代之后,我们可以查看arrContainer
并看到它包含 3 个项目(根据我们的For i to itLimit
循环,从 0 到 2)。里面的每个数组arrContainer
都等于上面迭代中创建的数组之一。
我们现在可以参考这些项目,例如:
Dim y as Variant
y = arrContainer(2) '# or any in bounds index could be used instead of "2"'
最后使用 VBE Locals 窗口查看y
: