Змінні та константи у VBA

У VBA, як і в будь-якій іншій мові програмування, змінні та константи використовуються для зберігання будь-яких значень. Як випливає з назви, змінні можуть змінюватися, тоді як константи зберігають фіксовані значення.

Наприклад, константа Pi зберігає значення 3,14159265… Число «Пі» не зміниться під час виконання програми, але все ж таку величину зручніше зберігати як константу.

У той же час ми можемо використовувати змінну sVAT_Rate зберігати ставку ПДВ на придбані товари. Змінне значення sVAT_Rate може відрізнятися в залежності від придбаного продукту.

Типи даних

Усі змінні та константи мають певний тип даних. У таблиці нижче наведено типи даних, які використовуються у VBA, з описом і діапазоном можливих значень:

Тип даних РозмірОписДіапазон значень
Байт1 байтЦілі додатні числа; часто використовується для двійкових данихвід 0 в 255
Boolean2 байтМоже бути True або FalseПравда чи брехня
Ціле число2 байтЦілі числа (без дробової частини)від -32 до +768
Довго4 байтВеликі цілі числа (без дробової частини)от -2 147 483 648 до +2 147 483 647
один4 байтЧисло з плаваючою комою одинарної точностівід -3.4e38 до +3.4e38
подвійний8 байтЧисло з плаваючою комою подвійної точностівід -1.8e308 до +1.8e308
Валюта8 байтЧисло з плаваючою комою з фіксованою кількістю знаків після комиот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Дата8 байтДата й час – дані типу Date представлені числом із плаваючою комою. Ціла частина цього числа виражає дату, а дробова – час.з 1 січня 100 року по 31 грудня 9999 року
Об'єкт4 байтПосилання на об'єктБудь-яке посилання на об'єкт
рядокзмінюєтьсяНабір символів. Тип String може мати фіксовану або змінну довжину. Частіше використовується зі змінною довжиноюФіксована довжина – приблизно до 65 символів. Змінна довжина – приблизно до 500 мільярдів символів
варіантзмінюєтьсяМоже містити дату, число з плаваючою точкою або рядок символів. Цей тип використовується у випадках, коли заздалегідь невідомо, який тип даних буде введено.Число – Double, рядок – String

Очевидно, використовуючи наведену вище таблицю та вибираючи правильний тип даних, ви можете використовувати пам'ять більш економно (наприклад, виберіть тип даних Ціле число замість Довго or один замість подвійний). Однак, використовуючи більш компактні типи даних, ви повинні бути обережними, щоб ваш код не намагався вписати в них непропорційно великі значення.

Оголошення змінних і констант

Примітка перекладача: Говорячи про змінні в VBA, варто відзначити ще один дуже важливий момент. Якщо ми оголошуємо змінну, але не присвоюємо їй жодного значення, вона ініціалізується значенням за замовчуванням:

• текстові рядки ініціалізуються порожніми рядками;

• числа — значення 0;

• тип змінних Boolean - Помилковий;

• дати – 30 грудня 1899р.

Перш ніж використовувати змінну або константу, її необхідно оголосити. Для цього додайте такий простий рядок коду до макросу:

Dim Имя_Переменной As Тип_Данных

У наведеному вище рядку коду Ім'я змінної це ім'я змінної, яка буде використовуватися в коді, і Тип даних є одним із типів даних із таблиці, наведеної трохи раніше в цій статті. Наприклад:

Dim sVAT_Rate As Single Dim i As Integer

Константи оголошуються аналогічно, але при оголошенні констант необхідно відразу вказувати їх значення. Наприклад, так:

Const iMaxCount = 5000 Const iMaxScore = 100

Не обов'язково оголошувати змінні в Excel. За замовчуванням усі введені, але не оголошені змінні в Excel матимуть тип варіант і зможе приймати як числове, так і текстове значення.

Таким чином, програміст може використовувати нову змінну в будь-який час (навіть якщо вона не була оголошена), а Excel розглядатиме її як змінну типу варіант. Однак є кілька причин, чому цього робити не варто:

  1. Використання пам'яті та швидкість обчислень. Якщо ви не оголошуєте змінну із зазначенням типу даних, то за умовчанням для неї буде встановлено тип варіант. Цей тип даних використовує більше пам’яті, ніж інші типи даних. Кілька додаткових байтів на змінну може здатися небагато, але на практиці програми можуть мати тисячі змінних (особливо під час роботи з масивами). Тому додаткова пам'ять використовується такими змінними, як варіант, порівняно зі змінними типу Ціле число or один, може скласти значну суму. Крім того, операції зі змінними типу варіант виконуються набагато повільніше, ніж зі змінними інших типів, відповідно додаткова тисяча змінних типу варіант може значно сповільнити обчислення.
  2. Запобігання помилкам в іменах змінних. Якщо оголошено всі змінні, можна використовувати оператор VBA − Варіант явний (ми поговоримо про це пізніше), щоб ідентифікувати всі неоголошені змінні. Це виключає появу помилки в програмі в результаті неправильно написаного імені змінної. Наприклад, використовуючи змінну з іменем sVAT_Rate, ви можете зробити помилку і, присвоївши значення цій змінній, написати: «VATRate = 0,175». Очікується, що відтепер змінна sVAT_Rate має містити значення 0,175 – але, звичайно, це не так. Якщо включений режим обов'язкового оголошення всіх використовуваних змінних, то компілятор VBA відразу вкаже помилку, так як не знайде змінну Ставка ПДВ серед оголошених.
  3. Виділення значень, які не відповідають оголошеному типу змінної. Якщо ви оголосите змінну певного типу та спробуєте призначити їй дані іншого типу, ви отримаєте помилку, яка, якщо її не виправити, може призвести до збою програми. На перший погляд це може здатися вагомою причиною не оголошувати змінні, але насправді, чим раніше виявляється, що одна зі змінних отримала неправильні дані, які вона мала отримати – тим краще! Інакше, якщо програма продовжує працювати, результати можуть бути невірними та неочікуваними, і буде набагато складніше знайти причину помилок. Також можливо, що макрос буде «успішно» виконано. В результаті помилка залишиться непоміченою і робота продовжиться з некоректними даними!

У зв'язку з цим бажано якомога раніше виявити некоректний тип даних і виправити такі помилки в коді. З цих причин під час написання макросу VBA рекомендується оголошувати всі змінні.

Варіант явний

Оператор Варіант явний спричиняє оголошення всіх змінних, які використовуватимуться в коді VBA, і позначає всі неоголошені змінні як помилки під час компіляції (перед початком виконання коду). Застосувати цей оператор нескладно – просто напишіть цей рядок у самому верху файлу VBA:

Option Explicit

Якщо ви хочете завжди вставляти Варіант явний у верхній частині кожного нового створеного модуля VBA, це можна зробити автоматично. Для цього вам потрібно включити опцію Вимагати оголошення змінної у налаштуваннях редактора VBA.

Це робиться так:

  • У меню редактора Visual Basic клацніть інструменти > Опції
  • У діалоговому вікні, що з’явиться, відкрийте вкладку редактор
  • Поставте прапорець Вимагати оголошення змінної і натисніть OK

Коли включено, рядок Варіант явний буде автоматично вставлено на початку кожного нового створеного модуля.

Область змінних і констант

Кожна оголошена змінна або константа має власну обмежену область, тобто обмежену частину програми, в якій існує ця змінна. Область залежить від того, де було зроблено оголошення змінної або константи. Візьмемо, наприклад, змінну sVAT_Rate, який використовується у функції Загальна вартість. У наведеній нижче таблиці розглядаються два варіанти визначення області змінної sVAT_Rateоголошений у двох різних позиціях у модулі:

Параметр Явний Dim sVAT_Rate Як одна функція Total_Cost() Як подвійна ... Кінцева функція
Якщо змінна sVAT_Rate оголошено на самому початку модуля, то область видимості цієї змінної буде весь модуль (тобто змінна sVAT_Rate буде розпізнано всіма процедурами цього модуля).

Тому, якщо у функції Загальна вартість змінна sVAT_Rate буде присвоєно певне значення, тоді наступна функція, що виконується в тому самому модулі, використовуватиме цю змінну sVAT_Rate з таким же значенням.

Однак якщо викликається якась функція, розташована в іншому модулі, то для неї змінна sVAT_Rate не буде відомо.

Параметр Явна функція Total_Cost() As Double Dim sVAT_Rate As Single ... End Function
Якщо змінна sVAT_Rate оголошений на початку функції Загальна вартість, тоді його область буде обмежена лише цією функцією (тобто в межах функції Загальна вартість, ви можете використовувати змінну sVAT_Rate, але не зовні).

При спробі використання sVAT_Rate в іншій процедурі компілятор VBA повідомить про помилку, оскільки ця змінна не була оголошена поза функцією Загальна вартість (за умови використання оператора Варіант явний).

У наведеному вище прикладі змінну оголошено на рівні модуля за допомогою ключового слова Dim. Однак може знадобитися, щоб оголошені змінні можна було використовувати в інших модулях. У таких випадках оголосити змінну замість ключового слова Dim необхідно використовувати ключове слово громадськості.

До речі, щоб оголосити змінну на рівні модуля, а не ключове слово Dim можна використовувати ключове слово приватний, що вказує на те, що ця змінна призначена для використання лише в поточному модулі.

Ви також можете використовувати ключові слова для оголошення констант. громадськості и приватний, але не замість ключового слова Constразом із ним.

У наступних прикладах показано використання ключових слів громадськості и приватний застосовується до змінних і констант.

Опція Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
У цьому прикладі ключове слово громадськості використовується для оголошення змінної sVAT_Rate і константи iMax_Count. Обсяг елементів, оголошений таким чином, буде весь поточний проект.

Це означає, що sVAT_Rate и iMax_Count будуть доступні в будь-якому модулі проекту.

Варіант Explicit Private sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
У цьому прикладі, щоб оголосити змінну sVAT_Rate і константи iMax_Count використане ключове слово приватний. Обсяг цих елементів є поточним модулем.

Це означає, що sVAT_Rate и iMax_Count буде доступний для всіх процедур поточного модуля, але не буде доступний для процедур в інших модулях.

залишити коментар