2015-06-15 6 views
0

Я пытаюсь прочитать список идентификаторов (целых чисел) в одномерный массив в макросе excel.Недостаток ошибки вне диапазона в массиве

Я подсчитал количество идентификаторов, которые необходимо будет ввести на предыдущем шаге, поэтому узнайте, каким должен быть мой размер массива. Теперь я хочу создать массив и прочитать значения в этом массиве. Ниже приведен код, который дает мне сообщение «Ошибка времени выполнения 9, индекс вне диапазона» в строке, где я читаю «RowID» в массиве. Пожалуйста, дайте мне знать, что я делаю неправильно.

Примечания: PD_incD - это счетчик идентификаторов, подлежащих считыванию в массив.

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

Вы ссылаетесь на массив, как если бы у вас было 2 измерения при использовании (x, y) синтаксиса. У вас есть только массив с 1 размером, чтобы вы получили эту ошибку. Просто удалите «, 1» - здесь нет цели.

+0

Удалены и еще ту же самую ошибку. –

0

Вы должны уметь назначить PD_IncD_Array, для AIN между 1 и PD_IncD. Вероятно, вы не удовлетворите это условие.

Проверьте ошибки PD_IncD и AIN при ошибке (вы можете использовать MsgBox или отладить). Также уточните строку, в которой указана ошибка.

1

Ошибка правильная, но причина связана с вашей логикой.

Вы никогда не увеличиваете RowID, если первая часть вашего оператора if истинна. Это оставляет вас с бесконечным циклом, но поскольку вы назначаете значение массиву, сначала вы получаете ошибку за пределами границ.

Я не уверен, что ваша точная логика, но я предполагаю, что вы хотите, чтобы увеличить 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 
Смежные вопросы