2016-05-08 16 views
0

Как новичок в VBA, я путать со следующим вопросом:VBA массив (ReDim Preserve & Indexing)

Dim DynArray() As Double 
ReDim DynArray(0 To 0) 
DynArray(0) = 100 
ReDim Preserve DynArray(5 To 5) 'subscript out of range 
DynArray(5) = 100 

почему он не работает? и как изменить верхнюю границу и/или нижнюю границу массива в VBA, сохраняя при этом значения исходного массива? Спасибо.

+1

Почему ваш заголовок говорит C++, когда речь идет о vba? –

+0

тип неправильное имя .... но не знаю, как изменить после отправки ... – angelbj55

+0

Спасибо за помощь! – angelbj55

ответ

2

The documentation утверждает, что

когда вы используете Preserve, вы можете изменить размер массива только изменения верхней границы; изменение нижней границы вызывает ошибку.

Значение: вы можете сделать только

ReDim Preserve DynArray(0 To 5) 
+0

Хороший короткий ответ. Я добавил еще один ответ, чтобы добавить несколько деталей. –

+0

Большое спасибо! Полезно – angelbj55

+0

Вы можете найти любой ответ, который окажется полезным, щелкнув стрелки слева. Кроме того, вы можете отметить ответ, который наилучшим образом отвечает на ваш вопрос в качестве принятого ответа. Это сигнализирует другим читателям, что этот ответ решил вашу проблему. Он также обеспечивает * репутацию * для ответчика и даже немного для себя. Вы можете прочитать https://stackoverflow.com/help/whats-reputation, если хотите узнать больше о репутации в StackOverflow и о том, как она работает. – Leviathan

0

выше ответ является правильным, но я просто хотел бы добавить несколько деталей.

Если вы используете Сохранить ключевое слово, вы можете размер только последний массив измерение, и вы не можете изменить количество измерений на всех. Например, для , если ваш массив имеет только одно измерение, вы можете изменить размер этого размера , потому что это последнее и единственное измерение. Однако, если ваш массив имеет два или более измерений, вы можете изменить размер только последнего измерения и сохранить содержимое массива. Следующий пример показывает, как вы можете увеличить размер последнего измерения динамического массива без удаления любых существующих данных , содержащихся в массиве.

От documentation:

В этом примере используется оператор ReDim для распределения и перераспределения дискового пространства для переменных динамического массива. Предполагается, что опционная база равна 1.

Dim MyArray() As Integer ' Declare dynamic array. 
Redim MyArray(5) ' Allocate 5 elements. 
For I = 1 To 5 ' Loop 5 times. 
MyArray(I) = I ' Initialize array. 
Next I 

Следующий оператор изменяет размер массива и стирает элементы.

Redim MyArray(10) ' Resize to 10 elements. 
For I = 1 To 10 ' Loop 10 times. 
MyArray(I) = I ' Initialize array. 
Next I 

Следующий оператор изменяет размер массива, но не стирает элементы.

    Redim Preserve MyArray(15) ' Resize to 15 elements. 

Так ваша ошибка: ReDim Preserve DynArray(5 To 5) где вы изменили нижнюю границу.

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