3.3 Змінні, константи і типи даних
Змінні - контейнери для зберігання змінюваних даних. Без них не обходиться практично жодна програма. Для простоти змінну можна порівняти з номерком в гардеробі - ви здаєте в "гардероб" якісь дані, у відповідь вам видається номерок. Коли вам знову потрібні були ці дані, ви "пред'являєте номерок" і отримуєте їх. Приклад роботи з змінними в VBA може виглядати так:
Dim nMyAge As Integer
nMyAge = nMyAge + 10
Dim nMyAge As Integer
Як розшифрувати цей рядок:
Dim - це область видимості змінної. У VBA передбачено 4 ключових слова для визначення області видимості змінних:
Static nVar1 As Integer
nVar1 = nVar1 + 1
Якщо немає ніяких особливих вимог, то є сенс завжди вибирати область видимості Dim.
При створенні програм VBA настійно рекомендується визначитися з правилами, за якими будуть присвоюватися імена об'єктів - угода про іменування. Найчастіше використовується так зване угорська угода (в честь одного з програмістів Microsoft, Charles Simonyi, угорця за національністю):
- в ранніх версіях VB не було слова Const - все константи визначалися як змінні, а для відмінності їх записували великими літерами, між словами ставили підкреслення:
Багато програмістів використовують такий підхід для позначення констант і зараз (але використання ключового слова Const тепер обов'язково - про це буде розказано в наступному розділі).
У VBA передбачені наступні типи даних:
- числові (byte - ціле число від 0 до 255, integer - ціле число від -32768 до 32767, long - велике ціле число, currency (велике десяткове число з 19 позиціями, включаючи 4 позиції після коми), decimal (ще більше десяткове число з 29 позиціями), single і double - значення з плаваючою комою (double в два рази більше));
Увага! Спроба оголосити змінну з типом Decimal (наприклад, Dim n As Decimal) призведе до синтаксичну помилку. Щоб отримати можливість працювати з типом Decimal, змінну потрібно спочатку оголосити як Variant чи взагалі оголосити без типу (Dim n), оскільки тип даних Variant використовується в VBA за замовчуванням.
- строкові (string змінної довжини (до приблизно 2 млрд символів) і фіксованої довжини (до приблизно 65400 символів);
- дата і час (date - від 01.01.100 до 31.12.9999);
- логічний (boolean - може зберігати тільки значення True і False);
- об'єктний (object - зберігає посилання на будь-який об'єкт в пам'яті);
- Variant - спеціальний тип даних, який може зберігати будь-які інші типи даних.
Можна ще використовувати призначені для користувача типи даних, але їх спочатку потрібно визначити за допомогою виразу Type. Зазвичай призначені для користувача типи даних використовуються як додатковий засіб перевірки введених користувачем значень (класичний приклад - поштовий індекс).
Деякі моменти, пов'язані з вибором типів даних для змінних:
nVar1% = nVar1% + 1
Такий підхід є застарілим і до використання не рекомендується.
У цьому випадку змінна буде автоматично оголошена з типом Variant.
nVar1 = nVar1 + 1
- скорочується кількість помилок: програма з самого початку відмовиться приймати в змінну значення неправильно типу (наприклад, строкове замість числового);
- при роботі з об'єктами підказка по властивостям і методам діє тільки тоді, коли ми спочатку оголосили об'єктну змінну з потрібним типом. Наприклад, в Excel два варіанти коду працюватимуть однаково:
Dim oWbk As Workbook
Set oWbk = Workbooks.Add ()
Set oWbk = Workbooks.Add ()
Але підказка по властивостям і методам об'єкта oWbk буде працювати тільки в другому випадку.
Проілюструвати, навіщо вони це роблять, можна на простому прикладі:
Гарне правило - оголошувати змінні завчасно, а не коли вони потрібні були. Це дозволяє зробити програму більш читабельною і чітко спланованою.
Можна оголосити кілька змінних в одному рядку, наприклад, так:
Dim n1 As Integer, s1 As String
Присвоєння значень змінним виглядає так:
Якщо потрібно збільшити вже існуюче значення змінної, то команда може виглядати так:
nVar1 = nVar1 + 1
В обох прикладах знак рівності означає не "дорівнює", а привласнити.
При присвоєнні значень змінним потрібно пам'ятати про наступне:
- строкові значення завжди полягають в подвійні лапки:
- значення дати / часу полягають в "решітки" - символи фунта:
Зверніть увагу, що при присвоєнні значення дати / часу таким "явним способом" нам доведеться використовувати прийняті в США стандарти: 05 в даному випадку - це місяць, 06 - день. Відображення ж цього значення (наприклад, у вікні повідомлення) буде залежати від регіональних налаштувань на комп'ютері користувача.
Якщо потрібно передати шістнадцяткове значення, то перед ним ставляться символи H:
Що міститься в змінних до присвоєння їм значень?
- У змінних всіх числових типів даних - 0.
- В строкових змінних змінної довжини - "" (рядок нульової довжини).
- В строкових змінних фіксованої довжини - рядок даної довжини з символами ASCII 0 (ці символи на екран не виводяться).
- У Variant - пусте значення.
- У Object - ніщо (немає посилання ні на один з об'єктів).
Константи - ще один контейнер для зберігання даних, але, на відміну від змінних, вони не змінюються в ході виконання VBA-програми. Для чого потрібні константи:
- код стає краще читаним / прибираються потенційні помилки;
- щоб змінити будь-яке значення, яке багато разів використовується в програмі (наприклад, рівень податку) - це можна зробити один раз.
У VBA константи визначаються за допомогою ключового слова Const:
Const COMP_NAME As String = "Microsoft"
При спробі в тілі процедури змінити значення константи буде видано повідомлення про помилку.
Константи дуже зручні при роботі з групами іменованих елементів (дні тижня, місяці, кольору, клавіші, типи вікон і т.п.). Вони дозволяють використовувати в коді програми легко читаються позначення замість труднозапомінаемих числових кодів. Наприклад, рядки
функціонально однакові, але в чому сенс першого рядка, здогадатися набагато легше.
MsgBox ( "Перший рядок" + vbCrLf + "Другий рядок")
Безліч наборів констант вбудовано в об'єктні моделі, які ми будемо розглядати в останніх розділах.