VBA Excel
242 subscribers
88 photos
23 links
VBA Excel для начинающих. Справка по VBA Excel. Visual Basic for Applications. Справочник. Самоучитель.
Download Telegram
🔄 Переопределение размерности массивов
Переопределять размерность динамических массивов в одной процедуре можно неоднократно, как по количеству измерений, так и по количеству элементов в измерении. Для переопределения размерности используется оператор ReDim.

📌 Примеры

1️⃣ Переопределение массивов с указанием размеров числами
Dim Massiv1() As Integer, Massiv2() As String
ReDim Massiv1(1 To 20)
ReDim Massiv2(3, 5, 4)


2️⃣ Переопределение массива с помощью переменной
Dim Massiv1() as Variant, x As Integer
x = 20
ReDim Massiv1(1 To x)



При переопределении размерности динамических массивов в VBA Excel теряются значения их элементов. Чтобы сохранить значения используется оператор Preserve.

3️⃣ Переопределение массива с сохранением значений
Dim Massiv1() As String
----- операторы -----
ReDim Massiv1(5, 2, 3)
----- операторы -----
ReDim Preserve Massiv1(5, 2, 7)


⚠️ Важно
🔹 Переопределяемый массив должен быть динамическим. При попытке переопределить массив, объявленный с указанием размерности (Dim Massiv(1 To 9) As String), произойдет ошибка компиляции с сообщением: Array already dimensioned (Массив уже имеет размерность).
🔹 Переопределить с оператором Preserve можно только последнюю размерность динамического массива. Это недоработка разработчиков, которая сохранилась и в VBA Excel 2016. Без оператора Preserve можно переопределить все размерности.

4️⃣ Еще один пример с ReDim Preserve
Sub Primer()
Dim x() As Byte, i1 As Byte, i2 As Byte, i3 As Byte
ReDim x(2, 2, 2)
For i1 = 0 To 2
For i2 = 0 To 2
For i3 = 0 To 2
x(i1, i2, i3) = i1 + i2 + i3
Next
Next
Next
ReDim Preserve x(2, 2, 3)
End Sub

Так все работает, но при попытке переопределения размерности: ReDim Preserve x(3, 2, 3) или даже ReDim Preserve x(2, 3, 2), происходит ошибка "Run-time error '9': Subscript out of range" (Ошибка времени выполнения '9': Индекс вне диапазона).

#VBA #ReDim #Preserve #Array #Массив #Размерность