2

我想要Redim Preserve一个数组,我不断收到错误“下标超出范围”。我知道只有最后一个维度的大小可以更改。这正是我正在做的。这里出了什么问题?数组的类型是Variant

BmMatrix = Sheets("BENCH").Range("a60", ActiveSheet.Range("a60").End(xlDown).End(xlToRight))
'totaal gewicht per subdeel in array wegschrijven
Dim aBmMatrix()
aBmMatrix = BmMatrix
rij = UBound(BmMatrix, 1)
kol = UBound(BmMatrix, 2) + 1
ReDim Preserve aBmMatrix(rij, kol)
TotGewKol = UBound(aBmMatrix, 2)
For i = 2 To UBound(BmMatrix, 1)
    g = 0 'g wordt totaal gewicht van land bv
    If BmMatrix(i, bm_kolom) <> "x" Then
        For j = 2 To UBound(bmexnul, 1)
            If bmexnul(j, weightkolom) = BmMatrix(i, bm_kolom) Then g = g + bmexnul(j, 10)
        Next j
    End If
    aBmMatrix(i, TotGewKol) = g
    aBmMatrix(1, TotGewKol) = "Totaal gewicht" 'titel kolom
Next i
4

2 回答 2

4

因为您使用范围的属性分配aBmMatrix数组Value,所以返回的数组具有每个维度的下限1

当您稍后在不明确提供下限的情况下对其进行重新调整时,重新调整会尝试为每个维度分配默认的下限,即0.

您需要明确提供下限:

ReDim Preserve aBmMatrix(lbound(aBmMatrix,1) to rij, lbound(aBmMatrix,2) to kol)
于 2012-12-27T14:04:06.110 回答
0

只有在仅更改数组的最后一个维度时才能使用 preserve。

于 2019-04-17T06:05:36.857 回答