【问题标题】:Redim Preserve gives 'subscript out of range'Redim Preserve 给出“下标超出范围”
【发布时间】:2012-12-27 13:48:37
【问题描述】:

我想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

【问题讨论】:

    标签: arrays vba excel subroutine preserve


    【解决方案1】:

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

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

    您需要明确提供下限:

    ReDim Preserve aBmMatrix(lbound(aBmMatrix,1) to rij, lbound(aBmMatrix,2) to kol)
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2020-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-02
        • 2015-05-27
        • 1970-01-01
        相关资源
        最近更新 更多