2015-11-02 1 views
2

Работа с доступом VBA, и я не могу увеличить двумерный динамический массив. Это кажется легкой задачей, но я держу "Подстрочный вне диапазона" ошибки @VBA массив не может увеличивать размер

ReDim Preserve affected_CAN_sat (this_array_index, 4)

Мой код:

Dim this_array() as Variant 
ReDim this_array(0,4) 

Dim this_array_index As integer 
this_array_index = Ubound(this_array) 'index = 0 

dim n as integer 
For n = 0 to x ' x is unknown integer 
this_array_index = this_array_index + 1 
ReDim Preserve this_array(this_array_index,4) 
Next 

он должен иметь увеличил размер массива, но он этого не сделал. Pls помочь

ответ

1

Из MSDN article на ReDim

  • Изменение размера с Preserve. Если вы используете Preserve, вы можете изменить размер только последнего измерения массива. Для каждого другого измерения вы должны указать границу существующего массива.

Это, как говорится, логика вашего кода не имеет смысла - если вы знаете номер, который цикл собирается увеличивать до и верхней границы массива будет увеличиваться на единицу каждый раз, а затем просто инициализировать массив с правильной верхней границей вместо зацикливания:

вместо:

For n = 0 to 10 '// <~~ We know this will only go up to 10 
    this_array_index = this_array_index + 1 
    ReDim Preserve affected_CAN_sat(this_array_index,4) 
Next 

Если вы знаете, что вы только собираетесь петли до 10 т hen just do:

Dim affected_CAN_sat() As Variant 
... 
this_array_index = this_array_index + 10 
ReDim Preserve affected_CAN_sat(0 To this_array_index, 0 To 4) As Variant 
... 

Не нужно зацикливаться.

+0

Извините, я использовал 10 в качестве примера. Реальный случай был бы неизвестным числом до 4000. –

+0

Вы должны знать это число, хотя в этой точке кода, чтобы использовать цикл 'For/Every'? –

+0

Я знаю, но ради достижения основного вопроса я решил не обращать на это никакого внимания. Однако, вернувшись к предыдущему пункту, имеет смысл, почему ReDim не работает. Есть ли возможное решение для ReDim ТОЛЬКО размер массива? –

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