下标超出阵列范围错误

时间:2015-06-15 20:31:39

标签: excel vba excel-vba

我正在尝试将一个id(整数)列表读入excel宏中的一维数组。

我已经计算了上一步中需要输入的ID数量,因此知道我的数组大小需要什么。现在我想创建一个数组并将值读入该数组。下面的代码给我一个“运行时错误9,下标超出范围”的消息,我正在读取数组中的“RowID”。请让我知道我做错了什么。

注意: PD_incD是要读入数组的ID数。

Dim AIN As Integer 'Array index
Dim PD_IncD_Array() As Variant
ReDim PD_IncD_Array(1 To PD_IncD) As Variant 'Create array for recording section IDs

AIN = 1 'Reset value
RowID = PD_1stRow 'Reset first row to begin search

Do While Not IsEmpty(Worksheets("Piping Data").Cells(RowID, 3).Value)
    If Worksheets("Piping Data").Cells(RowID, 3).Value = 1 Then
        PD_IncD_Array(AIN, 1) = RowID
        AIN = AIN + 1
    Else
        RowID = RowID + 1
    End If
Loop

MsgBox (PD_IncD_Array(AIN, 1)) 

3 个答案:

答案 0 :(得分:1)

错误是正确的,但原因与您的逻辑有关。

如果if语句的第一部分为true,则永远不会递增RowID。这会让您无限循环,但由于您要为数组赋值,因此首先会出现一个越界错误。

我不确定你的确切逻辑,但我猜你想要像这样增加RowID每个循环:

Do While Not IsEmpty(Worksheets("Piping Data").Cells(RowID, 3).Value)
    If Worksheets("Piping Data").Cells(RowID, 3).Value = 1 Then
       ' ReDim Preserve PD_IncD_Array(UBound(PD_IncD_Array) + 1)
        PD_IncD_Array(AIN, 1) = RowID
        AIN = AIN + 1
    End If

    RowID = RowID + 1
Loop

答案 1 :(得分:0)

当您使用(x,y)语法时,您正在引用数组,就像它有2个维度一样。您只有一个包含1维的数组,因此您将收到该错误。只需删除",1" - 这里没有用处。

答案 2 :(得分:0)

您应该可以在PD_IncD_ArrayAIN之间为1分配PD_IncD。你可能不满足这种情况。

出错时检查PD_IncDAIN的值(您可以使用MsgBox或调试)。还要澄清抛出错误的一行。