4. В круглые скобки можно записывать выражения, которые в свою очередь, тоже содержат круглые скобки, т.е. допускаются вложенные конструкции круглых скобок.
5. Остальные группы операторов в порядке убывания приоритета расположены следующим образом:
a) Арифметические,
b) Конкатенация строк,
c) Сравнения,
d) Логические и
e) Присваивание.
6. Унарные операторы, такие как унарный минус «-» и отрицание Not, обладают высшим приоритетом, каждый в своей группе.
7. Операторы, обладающие одним уровнем приоритета, например «*» и «/», «+» и «-», а также все операторы сравнения, в выражении оцениваются слева направо в порядке их следования.
8. Наименьшим приоритетом, естественно, обладает оператор присваивания «=», поскольку значение переменной можно присваивать только поле оценки всего выражения справа.
Тип выражения формируется исходя из типов его операндов и выполняемых над ними операций. Обычно в выражениях должны использоваться операнды только одного типа. Если же в выражении используются операнды разных типов, то VBA не всегда считает такое выражение ошибочным, как, например, Pascal, а пытается преобразовать его операнды к некоторому общему, совместимому, типу. С одной стороны такое автоматическое преобразование типов очень удобно, а иногда даже полезно, но с другой стороны оно может быть источником труднообнаруживаемых ошибок. Смешивание в одном выражении разных типов данных – это почти всегда следствие ошибки или непродуманности программы. Кроме того, результаты таких выражений подчас бывает непредсказуемыми.
При смешивании в одном выражении несовместимых типов данных, например, 3 + " банана", VBA прекращает выполнение программы, и выдает сообщении о недопустимом смешении данных. К сообщениям подобного рода не стоит относиться как чему-то негативному – наоборот, от них может быть больше пользы, чем вреда. В приведенном выше выражении, возможно, программист просто забыл заключить в кавычки цифру 3, и правильное выражение должно было бы выглядеть следующим образом – "3" + " банана". Хотя в данном, конкретном случае, необходимо было бы более чётко сформулировать свои намерения – выполнить конкатенацию строк – и вместо символа «+» использовать символ «&» – 3 & " банана". В этом случае VBA смог бы правильно интерпретировать выражение и выполнить автоматическое преобразование числового литерала 3 в данные типа String – что и требовалось согласно контексту.
Автоматические преобразования типов данных, для обеспечения их совместимости в выражениях VBA, выполняются по-разному, в зависимости от операторов и типов операндов. Формальные правила таких преобразований можно сформулировать следующим образом:
1. Операнд любого типа всегда можно преобразовать к типу String. Например, результатом выражение "Сегодня " & #4/20/2002# будет следующая строка "Сегодня 20/04/2002". В то время как "Сегодня " + #4/20/2002# – недопустимое выражение – нельзя складывать строку с датой.
2. Операнд типа String может быть преобразован к другому типу данных, только если его значение, построено по правилам записи литерала соответствующего типа. Например, в результате оценки выражения "-1.1e-1" – 1 будет получено значение -1.11 типа Double.
3. При выполнении арифметических операторов над числовыми типами данных действуют такие правила:
a) Если оба операнда одного типа – результат будет того же типа. Например, результатом выражения 2 + 3 будет значение 5 типа Integer, поскольку оба операнда имеют тип Integer.
b) Если операнды имеют разный тип, то будет выполнено так называемое повышение типа – т.е. тип операнда с меньшим диапазоном значений будет приведен к типу операнда с большим диапазоном значений, и результат тоже будет иметь тип с большим диапазоном значений. Например, выражение 2 + 3! даст результат типа Single, так как первый операнд имеет тип Integer, второй – Single, а всё выражение, соответственно, тоже Single. Иногда, если значение результата операции превышает допустимый диапазон значений большего из операндов, он может быть преобразован к типу с ещё большим диапазоном, вместо выдачи сообщения о переполнении, особенно, если результат присваивается переменной типа Variant. Числовые типы данных в порядке увеличения диапазона значений в VBA расположены следующим образом: Byte, Integer, Long, Single, Double и Currency.
c) При выполнении операции деления возвращается результат как значение с плавающей точкой типа Single или Double.
d) При выполнении операции возведения в степень результат всегда Double.
4. При сложении значений типа Data , а также при выполнении операций сложения и вычитания с одним из числовых типов результат будет типа Data. Например, значением выражение #4/20/2002# + 1.5 будет #21/04/2002 12:00:00#. Такой результат обусловлен тем, что внутреннее представление типа Data – это вещественное значение, в котором дата хранится в целой части, а время – в дробной.
5. При вычитании значений типа Data результат получается типа Double. Например, выражение #4/20/2002# - #4/21/2002 12:00:00 PM# даст результат -1.5.
6. Если в выражении имеются операнды логического типа, то значение True преобразуется в -1, а False – в 0. Например, выражение 2 + True будет иметь значение 1, а 2 * False – 0.
7. Если в выражении имеется хотя бы один операнд со значением Null, всё выражение тоже будет Null.
8. Если в выражении встречается значение Empty, то в числовом контексте – это 0, а в текстовом – пустая строка нулевой длины. Никаких ошибок недопустимого смешивания типов при этом не возникает.
9. При выполнении операции присваивания тип выражения справа от знака «=» всегда приводится к типу переменной слева от него. При этом, если диапазон значений переменной больше диапазона значений выражения, никакой потери информации не происходит, если же наоборот – происходит понижение типа.
Так, при присваивании переменной целого типа значения нецелого типа оно округляется до ближайшего целого значения. Например:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.