2016-06-22 11 views
0

Я пытаюсь увеличить массив arrSpecificWS при копировании диапазонов от листа wsTemp. Я получаю Подзаголовок за пределами допустимого диапазона Ошибка на ReDim Preserve arrSpecificWS (UBound (arrSpecificWS, 1) + 1) линия. Что мне не хватает?Копирование ячеек в массив VBA

Dim I as long 
Dim arrSpecificWS() 

'Prepare data to the array 
    ReDim arrSpecificWS(0, 1 To 6) 



For i = 2 To wsTemp.UsedRange.Rows.count 
    arrSpecificWS(UBound(arrSpecificWS), 1) = wsTemp.Range("D2" & i).Value 
    arrSpecificWS(UBound(arrSpecificWS), 2) = wsTemp.Range("E2" & i).Value 
    ReDim Preserve arrSpecificWS(UBound(arrSpecificWS, 1) + 1) 
    ReDim Preserve arrSpecificWS(UBound(arrSpecificWS, 2) + 1) 

Next i 
+0

http://stackoverflow.com/questions/7847284/subscript-out-of-range-with-redim-vba – Whencesoever

+0

Будет ли это означать, что вы не можете использовать Preserve на многомерных массивах? – Gudbahri

+0

Вы можете, но вы можете изменить только одно измерение. – Whencesoever

ответ

0

Является ли это сокращенной версией вашего кода? Если нет, и вы просто добавляете диапазон в массив, зачем беспокоиться об этом по диапазону и присваивать значения по одной ячейке за раз? Вы можете установить массив путем присвоения диапазона к ней, как это:

Dim arrRange() As Variant ' declare an unallocated array. 
arrRange = Range("D2:E" & wsTemp.UsedRange.Rows.count) 

Это гораздо быстрее, и тогда вы не должны обезьяна с redimming массивами.

+0

Спасибо @Tim, код выше - часть кода, который я пишу. Я хотел различить, где каждая ячейка идет, поэтому я могу манипулировать ячейкой на основе определенных критериев. На самом деле я работал над тем, с чем имею дело. – Gudbahri

+0

Для я = 2 Для wsTemp.UsedRange.Rows.count ReDim Preserve outerArrData (от 2 до I) arrSpecificWS (1) = wsTemp.Cells (я, 4) .Value arrSpecificWS (2) = wsTemp.Cells (I , 5) .value arrSpecificWS (3) = wsTemp.Cells (я, 6) .Value outerArrData (я) = arrSpecificWS Далее я – Gudbahri

Смежные вопросы