Вирази VBA

Вирази, оператори та операнди в VBA. Урок №19

Вирази – це окреме значення, чи кілька значень, з'єднаних знаками операцій (операторами). Простими словами це те, що можна обчислити. Причому отриманий результат повинен мати допустимий тип даних.

Вирази у VBA можуть містити:

  • символи (наприклад, «Привіт, Світ!»);
  • цифри та числа (наприклад, 3, 4, 25);
  • змінні (наприклад, myDay, x, y);
  • оператори, зокрема математичні (наприклад, +, -);
  • вбудовані функції VBA (наприклад, MsgBox() або IsDate());
  • константи;
  • процедури типу Function.

Вирази в програмуванні будуються для виконання обчислень, порівняння значень, привласнення значень змінним, передачі значень аргументів функціям і процедурам.

Наприклад, v=4+3 – це вираз обчислення суми чисел 4 і 3, а також привласнення результату змінній v.

Оператори в VBA

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

Наприклад, у виразі v=4+3 є два оператори:

  1. Оператор привласнення – знак дорівнює (=);
  2. Арифметичний оператор додавання – знак плюс (+).

Операнди в VBA

Операнд – це те, до чого застосовується оператор.

Наприклад, у виразі v=4+3 є три операнди та два оператори. Операнди – v, 4 та 3. Оператори – знак дорівнює (=) та знак плюс (+).

Іноді операнди ще називають аргументами.

Вирази і типи даних в VBA

При виконанні програми будь-який вираз обчислюється до отримання кінцевого результату. Тип даних отриманого результату приймається як тип даних виразу. Виходячи з цього, вирази можуть мати тип:

  • рядковий;
  • числовий;
  • логічний;
  • об'єктний;
  • дата.

Результатом обчислення виразу можуть бути спеціальні значення, що позначаються ключовими словами Empty та Null.

  • Empty – представляє неініціалізовану змінну типу Variant.
  • Null – вказує на те, що дана змінна не містить коректних даних.

Важливо!

В одному виразі не можна використовувати несумісні типи даних.

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

Приклад виправлення компілятором несумісних типів даних

Sub myCode()
    Dim myText As String
    Dim myNum As Integer
    Dim myResult As Integer
    
    myText = "8"
    myNum = 3
    
    myResult = myNum + myText
    MsgBox (myResult)
End Sub

В даному прикладі ми використовуємо несумісні типи даних Integer (ціле число) та String (рядок). Виходить, що не можна додати до рядка число. Але, компілятор VBA, обробляючи наш вираз, розуміє, що можна перетворити рядок 8 на число і виконати додавання чисел 3 і 8. В результаті ми отримаємо 11.

А ось якщо ми привласнимо змінній myText значення «Hello World», то компілятор не зможе перетворити його на число. Тому при запуску програми ми побачимо перед собою повідомлення про помилку: «Run-time error '13': Type mismatch».

Приклад помилки під час обробки несумісних типів даних

Sub myCode()
    Dim myText As String
    Dim myNum As Integer
    Dim myResult As Integer
    
    myText = "Hello World"
    myNum = 3
    
    myResult = myNum + myText
    MsgBox (myResult)
End Sub

Результат: «Run-time error '13': Type mismatch»

Перетворення типів даних

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

Sub myCode()
    Dim myText As String
    Dim myDate As Date
    Dim myResult As String
    
    myText = "Сьогодні: "
    myDate = Date
    
    myResult = myText + Format(myDate)
    MsgBox (myResult)
End Sub

тут,

  • myText і myResult – рядкові змінні
  • myDate – змінна з типом Дата
  • Date – функція, яка повертає значення системної дати
  • Formate – це функція, яка перетворює число, дату або рядок на текст, відформатований відповідно до інструкцій, включених у вираз формату.

Виходить, що нам не вдається скласти рядок «Сьогодні: » і поточну датою, оскільки це різні типи і компілятор не може самостійно їх перетворити. Але завдяки функції Format у виразі myResult = myText + Format(myDate) ми перетворюємо дату в рядок і далі вже об'єднання двох рядків відбувається успішно.

В результаті у мене з'явилося повідомлення з текстом: Сьогодні: 12.11.2022

Примітка!

Якщо вираз містить змінні типу Variant, компілятор VBA набагато швидше виконає автоматичне перетворення типів даних. Це пов'язано з тим, що такі змінні можуть зберігати дані будь-якого з допустимих у VBA типів: числа, рядки, дати, об'єкти.

Main Menu