Выражения – это отдельное значение, или несколько значений, соединённых знаками операций (операторами). Простыми словами – это то, что можно вычислить. Причём полученный результат должен иметь допустимый тип данных.
Выражения в VBA могут содержать:
- символы (например, «Привет, Мир!»);
- цифры и числа (например, 3, 4, 25);
- переменные (например, myDay, x, y);
- операторы, в том числе математические (например, +, -);
- встроенные функции VBA (например, MsgBox() или IsDate());
- константы;
- процедуры типа Function.
Выражения в программировании строятся для выполнения вычислений, сравнения значений, присвоении значений переменным, передачи значений аргументов функциям и процедурам.
Например, v=4+3 – это выражение вычисления суммы чисел 4 и 3, а также присвоение результата переменной v.
Операторы в VBA
Оператор – это наименьшая единица программного кода, команда или набор команд. Это специальный символ, который указывает на то, что нужно выполнить некую операцию с операндами (сложить, вычесть, сравнить и т.д.). Иногда, операторы называют инструкцией.
Например, в выражении v=4+3 есть два оператора:
- Оператор присваивания – знак равно (=);
- Арифметический оператор сложения – знак плюс (+).
Операнды в VBA
Операнд – это то, к чему применяется оператор.
Например, в выражении v=4+3 есть три операнда и два оператора. Операнды – v, 4 и 3. Операторы – знак равно (=) и знак плюс (+).
Иногда операнды ещё называют аргументами.
Выражения и типы данных
При выполнении программы, любое выражение вычисляется до получения конечного результата. Тип данных полученного результата принимается как тип данных всего выражения. Выходя из этого, выражения могут иметь тип:
- строковый;
- числовой;
- логический;
- объектный;
- дата.
Результатом вычисления выражения могут быть специальные значения, обозначаемые ключевыми словами 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 типов: числа, строки, даты, объекты.
