我正在尝试将一个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))
答案 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_Array
和AIN
之间为1
分配PD_IncD
。你可能不满足这种情况。
出错时检查PD_IncD
和AIN
的值(您可以使用MsgBox
或调试)。还要澄清抛出错误的一行。