Оператор Option Base в VBA Excel. Применение оператора Option Base для управления нумерацией массивов. Начальный индекс массива по умолчанию.
Управление нумерацией массивов
Если вы пишете код на VBA, то, возможно, сталкивались с тем, что массивы по умолчанию начинают нумерацию с 0. Однако, что делать, если удобнее работать с массивами, нумерация которых начинается с 1? Ответ прост — используйте оператор Option Base
!
Этот оператор должен быть вставлен в самом начале модуля, перед всеми процедурами.
Что делает Option Base?
Этот оператор позволяет установить начальный индекс по умолчанию для всех массивов, объявленных в модуле. Вы можете выбрать:
Option Base 0
— массивы начинаются с 0 (установлено по умолчанию).Option Base 1
— массивы начинаются с 1.
Оператор Option Base
влияет на нижнюю границу массивов только в том модуле, в котором он находится.
Если вы не используете Option Base
, массивы по умолчанию начинают нумерацию с 0, поэтому нет смысла использовать Option Base 0
.
Примечания
- Если вы явно задаёте диапазон индексов при объявлении массива (
Dim myArray(1 To 5)
),Option Base
не влияет на объявленную размерность. - Используйте
Option Base 1
, если привычнее работать с индексами, начинающимися с 1. - Для большей ясности кода рекомендуется явно задавать диапазон индексов (
Dim myArray(1 To 5)
) вместо зависимости отOption Base
.
Пример с Option Base 1
В этом примере оператор Option Base
используется для переопределения значения базового индекса массива, равного 0. Функция LBound
возвращает наименьший доступный индекс для указанного измерения массива. Оператор Option Base
используется только на уровне модуля.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Option Base 1 'Устанавливает индекс массива по умолчанию равным 1. Sub Primer() Dim MyArray(20), TwoDArray(3, 4) 'Объявление переменных массива. Dim ZeroArray(0 To 5) 'Переопределение базового индекса массива. Dim NewArray(4 To 5) 'Переопределение базового индекса массива. 'Используем функцию LBound для проверки нижней границы массивов. MsgBox LBound(MyArray) 'Возвращает 1. MsgBox LBound(TwoDArray, 2) 'Возвращает 1 (для второго измерения массива). MsgBox LBound(ZeroArray) 'Возвращает 0. MsgBox LBound(NewArray) 'Возвращает 4. End Sub |