Redim Preserve дает «индекс вне допустимого диапазона»

Я хочу 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

person Amir    schedule 27.12.2012    source источник


Ответы (2)


Поскольку вы назначаете массив aBmMatrix, используя свойство Value диапазона, возвращаемый массив имеет нижние границы 1 для каждого измерения.

Когда вы позже переопределяете его без явного указания нижних границ, переопределение пытается назначить каждому измерению нижнюю границу по умолчанию, которая равна 0.

Вам необходимо явно указать нижние границы:

ReDim Preserve aBmMatrix(lbound(aBmMatrix,1) to rij, lbound(aBmMatrix,2) to kol)
person GSerg    schedule 27.12.2012

Вы можете использовать save только тогда, когда вы изменяете только последнее измерение массива.

person DMM Wallnut    schedule 17.04.2019