Вопрос 57
Основы программирования языком VBA
Характеристика проекта VBA
Понятия объекта и объектной модели
Свойства и методы объектов, синтаксис языка, типы данных
Синтаксис и данные языка vba.
Синтаксис – это совокупность правил, которые определяют порядок использования и организацию элементов языка.
Типы данных - это определённые виды данных, которые VBA сохраняет и может манипулировать.
Типы данных |
Описание и диапазон значений |
Byte |
Сохранение положительных чисел от 0 до 255 |
Boolean |
Сохранение логических значений: True, False |
Currency |
Сохранение чисел для точных вычислений в диапазоне от -922337203685477,5808 до 922337203685477,5807 |
Date |
Сохранение даты и времени. Даты от 1.01.100 до 31.12.9999 Время от 00:00:00 до 23:59:59 |
Double |
Сохранение чисел двойной точности от -1,79769313486232*10308 до -4,94065645841247*10-324 от 4,94065645841247*10-324 до 1,79769313486232*10308 |
Integer |
Сохранение целых чисел от -32768 до 32767 |
Long |
Сохранение целых чисел от -2147483648 до 2147483647 |
Single |
Сохранение чисел одинарной точности от -3,402823*1038 до -1,401298*10-45 от 1,401298*10-45 до 3,402823*1038 |
String |
Сохранение текста длинной до 2 млрд. символов |
Variant |
Сохранение любого типу данных |
10.2.2. Операторы языка VBA.
Оператор - это символ, или выражение, дает указание программе выполнить определенное действие над конкретными данными. VBA содержит несколько категорий операторов: оператор присваивания; числовые и текстовые операторы; логические операторы; операторы сравнения.
Оператор присвоения. Символ равно (=) в VBA является оператором присваивания и используется для присвоения значения переменной. Правила записи оператора присваивания следующие: слева от оператора присваивания должна стоять переменная, которой передается значение, справа от оператора присваивания должно стоять выражение.
Операция присваивания имеет две синтаксические формы:
1. Let varname = expression;
2. varname = expression;
varname - любая переменная VBA
expression - любое выражение VBA
Первый вариант операции присвоения использовался в ранних языках программирования Basic. Второй вариант используется в современной версии VBA.
При выполнении оператора присваивания VBA сначала вычисляет выражение справа от оператора присваивания, а затем сохраняет результат выражения в переменной, имя которой находится слева от знака равенства.
X = 5 + 7; Y = X + 5 ; Z = X - Y; A = B; I = I + 1.
Начинающим пользователям иногда непонятен смысл последней операции присвоения, когда и в левой, и в правой частях операции является одна и та же переменная. В этом случае сначала в промежуточный элемент памяти помещается результат вычисления выражения правой части оператора присваивания, а затем этот результат присваивается переменной в левой части.
Например, если в операторе присвоения А = А +5, переменная А до операции присвоения содержала значения 7, то после операции она будет содержать значение 12 (7 +5).
Следует запомнить:
• Можно присваивать любую численную переменную (или выражение) любой другой переменной численного типа (или переменной типа Variant);
• Если присваивается численное выражение переменной, которая типизируется, с меньшей точностью (например, Double - Long), VBA округляет значение выражения для совпадения с точностью переменной, приобретающей новое значение;
• Если переменной типа String присваивается переменная типа Variant, содержащей число, VBA автоматически преобразует это число в строку.
Оператор сложения (+).
Операторы сложения выполняет простое сложение. Оба операнда должны быть численными выражениями или строками, которые VBA может преобразовать в число. Операторы сложения можно также использовать для выполнения арифметических операций с данными типа Date.
Тип данных результата выражения сложения обычно тот же, что и наиболее точный тип в этом выражении. Но, есть исключения:
• Результатом сложения типа Single и Long будет Double;
• Результатом сложения типа Date с любым другим типом данных всегда будет Date;
• Если результат превышает диапазон типа Integer, то VBA преобразует его в Long;
• Если результат превышает типы Long, Single, Date, то VBA преобразует его в Double;
• Если любой операнд в выражении сложения является Null, то результатом выражения сложения также будет Null.
Напомним порядок увеличения точности для численных типов данных: Byte, Integer, Long, Single, Double, Currency.
Следует сказать, что надо четко понимать как VBA преобразует типы данных в результате арифметических операций. Это поможет в дальнейшем избежать многих "ненужных" ошибок при написании кода.
Оператор вычитания (-)
Оператор вычитания выполняет две задачи: используется для вычитания одного числа из другого; обозначает унарный минус (это знак минус, который помещается перед числом для указания того, что это отрицательное число). Поместить унарный минус перед переменной или выражением означает то же, что умножить это число на -1.
Оба операнда в выражении вычитания должны быть многочисленными переменными (выражениями) или строчными выражениями, которое VBA может преобразовать в число. Можно использовать оператор вычитания для работы с датами.
VBA использует те же правила для определения типа данных результата выражения вычитания, что и для выражений, использующих операторы сложения. Но, есть дополнение: Если оба операнда в выражении является типом Date, то результат выражения будет иметь тип Double.
Оператор умножения (*)
Оператор умножения умножает два числа - результатом выражения умножения есть произведение двух операндов. Оба операнда в выражении умножения должны быть численными выражениями или строками, которые VBA может преобразовать в число.
VBA следует тем же правилам для определения типа данных результата выражения умножения, что и для выражений, использующих оператор сложения. В выражениях умножения все переменные Variant, содержащие значения типа Date, преобразуются в численные значения.
Оператор деления (/)
Оператор деления с плавающей запятой выполняет обычное арифметическое деление своих операндов.
В выражениях деления первый операнд делится на второй операнд - результатом деления является частное.
Оба операнда в выражении деления с плавающей запятой должны быть численными выражениями или строками, которые VBA может преобразовать в число.
Если хотя бы один операнд в выражении деления имеет тип Null, то результат деления также будет Null.
Типом данных операции деления с плавающей запятой является Double, за исключением:
• Оба операнда в выражении деления имеют тип Integer или Single - результат Single;
• Если результат выражения не переполняет диапазон значений для типа Single.
Целочисленное деление (\)
Целочисленное деление отличается от деления с плавающей запятой тем, что его результатом всегда является целое число без дробной части.
Оба операнда в выражении целочисленного деления должны быть численными выражениями или строками, которые VBA может преобразовать в число.
Перед выполнением операции целочисленного деления VBA округляет каждый операнд в число типа Integer или Long (такой же тип имеет и результат целочисленного деления).
VBA отвергает (но не округляет!) любой дробный остаток результата выражения целочисленного деления. Например, выражения 22 \ 5 и 24 \ 5 иметь один и тот же результат = 4.
Если хотя бы один операнд в выражении целочисленного деления имеет тип Null, то результат деления также будет Null.
Деление по модулю (Mod)
Деление по модулю как бы дополняет целочисленное деление. В делении по модулю выражение возвращает только остаток операции деления как целое.
22 Mod 5 = 4; 24 Mod 5 = 8; 25 Mod 5 = 0.
Остальные свойства деления по модулю идентичны целочисленному делению.
Возведение в степень (^)
Оператор возведения в степень подносит число в степень.
5 ^ 3 = 125.
Оба операнда в выражении возведение в степень должны быть численными выражениями или строками, которые VBA может преобразовать в числа.
Операнд слева от оператора возведения в степени может быть отрицательным числом только тогда, если операнд справа является целым.
Результат выражения имеет тип Double.
Если хотя бы один операнд в выражении имеет тип Null, то результат возведения в степень также будет Null.
Подведем итог вышеизложенного:
Арифметические операторы VBA
Оператор |
Синтаксис |
Описание |
+ |
A + B |
Сложение: складывает А и В. |
- |
A - B |
Вычитание: вычитает из А В. |
* |
A * B |
Умножение: перемножает А на В. |
/ |
A / B |
Деление: делит А на В. |
\ |
A \ B |
Целочисленное деление: делит А на В, отбрасывая дробную часть. Результат - целое число. |
Mod |
A Mod B |
Деление по модулю: делит А на В, возвращая только остаток операции деления как целое число. |
^ |
A ^ B |
Возведение в степень: возводит А в степень В. |
Как операнд для логических операторов можно использовать любое действительное выражение, имеющее результат типа Boolean, а также число, которое может быть преобразовано в значение типа Boolean.
Результатом логической операции является значение типа Boolean (или Null, если хотя бы один из операндов имеет значение Null).
Логический оператор AND
Синтаксис:
Операнд_1 AND Операнд_2
Оператор AND выполняет логическую конъюнкцию.
Результатом данной операции является значение True, только когда оба операнда имеют значение True, иначе - False.
Таблица истинности оператора AND
Операнд_1 |
Операнд_2 |
Результат |
True |
True |
True |
True |
False |
False |
False |
True |
False |
False |
False |
False |
Оператор AND можно использовать для нескольких операндов:
(5<7) AND (4>3) AND (5=6) результатом будет False
Независимо от количества операндов результатом логической операции AND будет True только в том случае, когда все операнды выражения будут иметь значение True. В любом другом случае результатом будет False. Обратите внимание, что операнды состоят в круглые скобки. VBA сначала вычисляет значение каждого операнда внутри скобок, а потом уже все выражение целиком.
Логический оператор OR
Синтаксис:
Операнд_1 OR Операнд_2
Оператор OR выполняет логическую дизъюнкцию.
Результатом данной операции является значение True, если хотя бы один из операндов имеет значение True, иначе - False.
Таблица истинности оператора OR
Операнд_1 |
Операнд_2 |
Результат |
True |
True |
True |
True |
False |
True |
False |
True |
True |
False |
False |
False |
Оператор OR можно использовать для нескольких операндов:
(5<7) OR (4>3) OR (5 = 6) результатом будет True.
Независимо от количества операндов результатом логической операции OR будет всегда True в том случае, если хотя бы один из операндов выражения иметь значение True. Иначе результатом будет False.
Операторов AND и OR можно комбинировать:
((5<7) AND (4>3)) OR (5 = 6) результатом будет True
Логический оператор NOT
Синтаксис:
NOT Операнд
Оператор NOT выполняет логическое отрицание.
Оператор NOT использует только один операнд.
Таблица истинности логического оператора NOT
Операнды |
Результат |
True |
False |
False |
True |
Операторы AND OR NOT можно комбинировать:
((5<7) AND (4>3)) OR NOT (5 = 6) результатом будет True
Логический оператор XOR
Синтаксис:
Операнд_1 XOR Операнд_2
Оператора XOR выполняет логическое исключение.
Результатом данной операции является значение True, если операнды имеют разные значения, иначе - False.
Таблица истинности логического оператора XOR
Операнд_1 |
Операнд_2 |
Результат |
True |
True |
False |
True |
False |
True |
False |
True |
True |
False |
False |
False |
((5<7) AND (4>3)) OR NOT (5=6) XOR (5=5) результатом будет False