繁体   English   中英

数组下标超出范围错误

[英]Subscript out of range error on array

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

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

注意: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)) 

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

如果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

使用(x,y)语法时,您引用的数组好像有2个维。 您只有一个具有1维的数组,因此您将得到该错误。 只需删除“,1”-在这里没有用。

你应该能够分配PD_IncD_Array ,为AIN之间1PD_IncD 您可能不满足此条件。

检查PD_IncDAIN的值PD_IncD出错(可以使用MsgBox或调试)。 还要澄清引发错误的行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM