Логические операторы VB. Описание операторов VB (Visual Basic) Краткие теоретические сведения
В Visual Basic можно выделить пять основных и важных логических операторов: And, Or, Not, Xor и Eqv. Роль каждого из них я сейчас и попытаюсь объяснить!
Итак,
And!
Это,
наверное, самый простой и нужный логический оператор среди других.
Help:
Возвращает
результат конъюнкции (логического И) для двух выражений.
Синтксис:
результат
= выражение1
And
выражение2
Т.е. результат будет истинным только в том случае, когда истинны выражение1 И выражение2. Возвращаемые оператором значения представлены в следующей таблице:
выражение1 | выражение2 | результат |
True | True | True |
True | False | False |
True | Null | Null |
False | True | False |
False | False | False |
False | Null | False |
Null | True | Null |
Null | False | False |
Null | Null | Null |
А теперь маленький пример:
Представим себе, что переменные User_Has_Computer и User_Has_Car объявлены как булевы значения и в процессе каких-нибудь действий приняли значения либо True либо False. Вы устанавливаете условие, проверяющие эти значения:
Мы же сэмулируем это сами:) - впишите куда - нибудь следующие строки:
Dim
User_Has_Car
As
Boolean
User_Has_Computer
=
True
User_Has_Car
=
True
If
User_Has_Computer
And
User_Has_Car
Then
MsgBox "Вы счастливый человек!"
End
If
При проверки данного условия на экран выскочит сообщение, извещающие, что пользователь счастливый человек, т.к. у него есть машинa И компьютер:-)! А теперь перед третьей или четвёртой строкой поставьте апостроф """ - закоменнтируйте строку. Теперь одна из переменных будет False по умолчанию. Теперь сообщение НЕ выскочит, т.к. пользователь не очень счастливый, имея машину ИЛИ компьютер...
Следующий оператор не менее простой - Or.
Help:
Выполняет
операцию логического ИЛИ (сложения) для двух выражений.
Синтаксис:
результат
= выражение1
Or
выражение2
Результат
будет истинным только в том случае, если только одно из выражений истинно.
Возвращаемые оператором значения представлены в следующей таблице:
выражение1 | выражение1 | результат |
True | True | True |
True | False | True |
True | Null | True |
False | True | True |
False | False | False |
False | Null | Null |
Null | True | True |
Null | False | Null |
Null | Null | Null |
И снова маленький пример с прежними булевыми перменными User_Has_Computer и User_Has_Car, которые в процессе каких-нибудь действий приняли значения либо True либо False.
Dim
User_Has_Computer
As Boolean
Dim
User_Has_Car
As
Boolean
User_Has_Computer
=
False
User_Has_Car
=
True
If
User_Has_Computer Or User_Has_Car
Then
MsgBox "Вы почти счастливый человек!"
End
If
При проверки данного условия на экран выскочит сообщение, извещающие, что пользователь почти счастливый человек, т.к. у него есть машинa, но нет компьютера:-|...
Оператор Not.
Help:
Выполняет
над выражением операцию логического отрицания.
Синтаксис:
результат
= Not
выражение
Т.е.
результат
стаёт
противополжным выражению
(исключая Null). Возвращаемые оператором
значения представлены в следующей таблице:
Пример:
Dim User_Has_Computer As Boolean
User_Has_Computer = False
If
Not
User_Has_Computer
Then
MsgBox "Сочувствую...:)"
End
If
Объясняю: условие If
... Then выполняется тогда, когда какое-нибудь выражение (на месте...)
равно True. Представим, что переменная User_Has_Computer
= False. Тогда строка
Not
User_Has_Computer даёт результат True и условие выполняется!
Оператор Xor.
Help:
Выполняет операцию
исключающего ИЛИ для двух выражений.
Синтаксис:
[результат
=]
выражение1
Xor
выражение2
В принципе, этот оператор
похож на Or, но это не просто ИЛИ
, а исключающее ИЛИ
. Если
одно и только одно из выражений
истинно (имеет значение True), результат
имеет значение True. А оператор Or допускает два истинных выражения
.
Результат
Пример:
Dim
User_Has_Computer
As Boolean
Dim
User_Has_Car
As
Boolean
User_Has_Computer
=
False
User_Has_Car
=
True
If
User_Has_Computer
Xor
User_Has_Car
Then
MsgBox "Вам нужна машина И компьютер!"
End
If
Здесь так же, как и в предыдущем примере условие выполняется только тогда, когда строка User_Has_Computer Xor User_Has_Car истинна (= True). А истинна она тогда и только тогда, когда только одно из условие истинно. Если оба, то условие уже не исполнится.
Оператор Eqv.
Help:
Используется
для проверки логической эквивалентности двух выражений.
Синтаксис:
результат
= выражение1
Eqv
выражение2
Тут
совсем всё просто: результат будет истинным в том случае, если оба выражения
либо истинны, либо ложны. Результат
определяется следующим образом:
Пример:
Dim
User_Has_Computer
As Boolean
Dim
User_Has_Car
As
Boolean
User_Has_Computer
=
True
User_Has_Car
=
True
If
User_Has_Computer
Eqv
User_Has_Car
Then
MsgBox "Вы или счастливый или несчастный человек!"
End
If
Здесь компьютер назовёт Вас человеком "счастливым или несчастным", т.к. условие выполняется только тогда, когда пользователь имеет и машину и компьютер или не того и не другого.
знак | название | Описание |
---|---|---|
= | Равно | Возвращает True если левый и правый операнды равны. Обратите внимание, что это перегрузка оператора присваивания. |
<> | Не равен | Возвращает True если левый и правый операнды не равны. |
> | Лучше чем | Возвращает True если левый операнд больше правого операнда. |
< | Меньше, чем | Возвращает True если левый операнд меньше правого операнда. |
>= | Больше или равно | Возвращает True если если левый операнд больше или равен правому операнду. |
<= | Меньше или равно | Возвращает True если левый операнд меньше или равен правому операнду. |
Is | Справочный капитал | Возвращает значение True если ссылка на левый объект - это тот же экземпляр, что и ссылка на правый объект. Он также может использоваться с Nothing (ссылка на нулевой объект) с обеих сторон. Примечание. Оператор Is попытается принудить оба операнда к Object перед выполнением сравнения. Если какая-либо сторона является примитивным типом или Variant , который не содержит объект (либо не-объектный подтип, либо vtEmpty), сравнение приведет к ошибке времени выполнения 424 - «Требуется объект». Если любой операнд принадлежит другому интерфейсу одного и того же объекта, сравнение вернет True . Если вам нужно проверить справедливость как экземпляра, так и интерфейса, ObjPtr(left) = ObjPtr(right) используйте ObjPtr(left) = ObjPtr(right) . |
Заметки
Синтаксис VBA позволяет «цепочки» операторов сравнения, но в целом эти конструкции следует избегать. Сравнение всегда выполняется слева направо только на 2 операндах за раз, и каждое сравнение приводит к Boolean . Например, выражение...
A = 2: b = 1: c = 0 expr = a > b > c
Может быть прочитан в некоторых контекстах как проверка того, является ли b между a и c . В VBA это оценивается следующим образом:
A = 2: b = 1: c = 0 expr = a > b > c expr = (2 > 1) > 0 expr = True > 0 expr = -1 > 0 "CInt(True) = -1 expr = False
Любой оператор сравнения, кроме Is использоваться с Object в качестве операнда будет выполняться на возвращаемом значении Object «s члена по умолчанию . Если объект не имеет члена по умолчанию, сравнение приведет к ошибке времени выполнения 438 - «Объект не поддерживает его свойство или метод».
Если Object не инициализирован, сравнение приведет к ошибке времени выполнения 91 - «Объектная переменная или С заблокированной переменной блока».
Если литерал Nothing используется с любым оператором сравнения, отличным от Is , это приведет к ошибке компиляции - «Недопустимое использование объекта».
Если Object по умолчанию Object является другой Object , VBA будет постоянно вызывать элемент по умолчанию каждого последующего возвращаемого значения до тех пор, пока не будет возвращен примитивный тип или не будет поднята ошибка. Например, предположим, что у SomeClass есть член по умолчанию Value , который является экземпляром ChildClass с членом ChildValue по ChildValue . Сравнение...
Set x = New SomeClass Debug.Print x > 42
Будет оцениваться как:
Set x = New SomeClass Debug.Print x.Value.ChildValue > 42
Если либо операнд является числовым, а другой операндом является String или Variant подтипа String , будет выполнено числовое сравнение. В этом случае, если String не может быть отнесено к числу, результатом сравнения будет ошибка времени выполнения 13 - «Несоответствие типа».
Если оба операнда представляют собой String или Variant подтипа String , сравнение строк будет выполняться на основе параметра сравнения параметров модуля кода. Эти сравнения выполняются по характеру по характеру. Обратите внимание, что символьное представление String содержащей число, не совпадает с сопоставлением числовых значений:
Public Sub Example() Dim left As Variant Dim right As Variant left = "42" right = "5" Debug.Print left > right "Prints False Debug.Print Val(left) > Val(right) "Prints True End Sub
По этой причине убедитесь, что переменные String или Variant передаются в числа перед выполнением численных сравнений неравенства.
Если один из операндов - это Date , то числовое сравнение по базовому двойному значению будет выполняться, если другой операнд является числовым или может быть преобразован в числовой тип.
Если другой операнд представляет собой String или Variant подтипа String который может быть перенесен в Date с использованием текущего языкового стандарта, String будет передана в Date . Если он не может быть применен к Date в текущей локали, результатом сравнения будет ошибка времени выполнения 13 - «Несоответствие типа».
Следует соблюдать осторожность при сравнении значений Double или Single и Booleans . В отличие от других числовых типов ненулевые значения нельзя считать True из-за поведения VBA в продвижении типа данных сравнения с использованием числа с плавающей точкой в Double:
Public Sub Example()
Dim Test As Double
Test = 42 Debug.Print CBool(Test) "Prints True.
"True is promoted to Double - Test is not cast to Boolean
Debug.Print Test = True "Prints False
"With explicit casts:
Debug.Print CBool(Test) = True "Prints True
Debug.Print CDbl(-1) = CDbl(True) "Prints True
End Sub
Краткие теоретические сведения
1. Синтаксис и семантика языка программирования VBA
Синтаксис языка программирования - набор правил, описывающий комбинации символов алфавита, считающиеся правильно структурированной программой (документом) или её фрагментом.
Основные синтаксические принципы этого языка следующие:
- VBA нечувствителен к регистру;
- чтобы закомментировать код до конца строки, используется одинарная кавычка (") или команда REM;
- символьные значения должны заключаться в двойные кавычки (");
- максимальная длина любого имени в VBA (переменные, константы, процедуры) - 255 символов;
- начало нового оператора - перевод на новую строку (точка с запятой, как в C, Java, JavaScript, для этого не используется);
- ограничений на максимальную длину строки нет (хотя в редакторе в строке помещается только 308 символов). Несколько операторов в одной строке разделяются двоеточиями:
MsgBox "Проверка 1" : MsgBox "Проверка 2" - для удобства чтения можно объединить несколько физических строк в одну логическую при помощи пробела и знака подчеркивания после него:
MsgBox "Сообщение пользователю" _
& vUserName
Семантика языка - это смысловое значение слов. В программировании - начальное смысловое значение операторов, основных конструкций языка и т. п.
Оператор - это наименьшая способная выполняться единица кода VBA. Оператор может объявлять или определять переменную, устанавливать параметр компилятора VBA или выполнять какое-либо действие в программе.
Арифметических операторов в VBA всего 7.
Четыре стандартных: сложение (+), вычитание (−), умножение (*), деление (/), и еще три:
- возведение в степень (^). Например, 2^3 = 8;
- целочисленное деление (\). Делит первое число на второе, отбрасывая (не округляя) дробную часть. Например, 5\2 = 2;
- деление по модулю (Mod). Делит первое число на второе, возвращая только остаток от деления. Например, 5 Mod 2 = 1.
Оператор присваивания в VBA - это знак равенства. Можно записывать так:
Let nVar = 10
а можно еще проще:
nVar = 10
Здесь не путайте знак равенства с оператором равенства. Последнее выражение означает "присвоить переменной nVar значение 10", а если строка выглядит так: If (nVar = 10) , то это значит "если значение переменной nVar равно 10".
Операторов сравнения в VBA всего 8:
- равенство (=). Например, If (nVar = 10);
- больше, чем (>) и меньше, чем (10);
- больше или равно (>=) и меньше или равно (= 10);
- не равно (). Например, If (nVar10);
- сравнение объектов (Is). Определяет, ссылаются объектные переменные на один и тот же объект или на разные. Например, If (obj1 is obj2);
- подобие (Like). Сравнивает строковый объект с шаблоном и определяет, подходит ли шаблон.
Операторы сравнения всегда возвращают True (если утверждение истинно) или False (если утверждение ложно).
Очень часто при проверке нескольких условий используются логические операторы :
- And - логическое И. Должны быть истинными оба условия;
- Or - логическое ИЛИ. Должно быть истинным хотя бы одно из условий;
- Not - логическое отрицание. Возвращает True, если условие ложно;
- Xor - логическое исключение. В выражении E1 Xor E2 возвращает True, если только E1 = True или только E2 = True, иначе - False;
- Eqv - эквивалентность двух выражений, возвращает True, если они имеют одинаковое значение;
- Imp - импликация, E1 Imp E2 возвращает False, если E1 = True и E2 = False, иначе - True.
Помнить нужно про And, Or, Not , остальные логические операторы используются редко.
Переменные - это контейнеры для хранения изменяемых данных. Без них не обходится практически ни одна программа. Для простоты переменную можно сравнить с номерком в гардеробе - вы сдаете в гардероб какие-то данные, в ответ вам выдается номерок. Когда вам опять потребовались эти данные, вы "предъявляете номерок" и получаете их.
Каждая переменная имеет имя. Обращение к переменной происходит по имени. Правила выбора имен в VBA едины для многих элементов (переменные, константы, функции, процедуры и т. п.):
- имя должно начинаться с буквы;
- не должно содержать пробелов и символов пунктуации (исключение - символ подчеркивания);
- максимальная длина - 255 символов;
- должно быть уникальным в текущей области видимости
- зарезервированные слова (те, которые подсвечиваются синим цветом в окне редактора кода) использовать нельзя.
При создании программ VBA рекомендуется определиться с правилами, по которым будут присваиваться имена объектам - соглашение об именовании. Чаще всего используется так называемое венгерское соглашение (в честь одного из программистов Microsoft, Charles Simonyi, венгра по национальности):
- имя переменной должно начинаться с префикса, записанного строчными буквами. Префикс указывает, что именно будет храниться в этой переменной:
str (или s) - String, символьное значение;
fn (или f) - функция;
sub - процедура;
c (или все буквы имени заглавные) - константа (контейнер для хранения данных, которые, в отличие от переменных, не изменяются в ходе выполнения VBA-программы);
b - Boolean, логическое значение (True или False);
d - дата;
obj (или o) - ссылка на объект;
n - числовое значение; - имена функций, методов и каждое слово в составном слове должно начинаться с заглавной буквы:
MsgBox objMyDocument.Name
Sub CheckDateSub()
Тип данных относят к самым фундаментальным понятиям любого языка программирования. Тип данных определяет множество допустимых значений, которое может принимать величина (переменная или константа), и множество действий, которые можно выполнить с этой величиной.
2. Основные типы данных VBA
В VBA предусмотрены следующие типы данных:
- числовые:
Byte - целое число от 0 до 255, для хранения нужен 1 байт памяти ;
Integer - целое число от −32 768 до 32 767, 2 байта ;
Long - большое целое число от −2 147 483 648 до 2 147 483 647, 4 байта ;
Currency (денежный) - большое десятичное число с 19 позициями, включая 4 позиции после запятой
(от –922337203685477,5808 до 922337203685477,5807), 4 байта ,
используется для хранения чисел, когда точность крайне важна, что бывает при вычислениях с денежными единицами;
Decimal - еще большее десятичное число с 29 позициями (после запятой можно использовать от 0 до 28 позиций), 8 байт ;
Single и Double - значения с плавающей запятой (4 и 8 байт )
(от -3.402823·10 38 до -1.401298·10 -45 для отрицательных значений и
от 1.401298·10 -45 до 3.402823·10 38 для положительных значений для Single, и
от -1.79769313486232·10 308 до -4.94065645841247·10 -324 для отрицательных значений и
от 4.94065645841247·10 -324 до 1.79769313486232·10 308 для положительных значений для Double); - строковые (String переменной длины (примерно до 2 млрд символов) и фиксированной длины (примерно до 65 400 символов));
- дата и время (Date - от 01.01.100 до 31.12.9999), 8 байт ;
- логический (Boolean - может хранить только значения True и False), 2 байта ;
- объектный (Object - хранит ссылку на любой объект в памяти);
- Variant - специальный тип данных, который может хранить любые типы данных, 16 байт +1
- математические, выполняются над числами, их результатом являются числа;
- операции отношения, могут применяться не только к числам, их результатом является значения логического типа;
- логические, используются в логических выражениях и их результатом являются логические значения.
3. Приоритеты операций
Приоритет | Операция |
1 2 3 4 5 6 7 8 9 10 11 12 |
Вызов функции и скобки ^ - (смена знака) *, / \ Mod +, – >, <, >=, <=, <>, = Not And Or Xor |
4. Математические функции
Функция | Возвращаемое значение | ||
Abs (<число>) | Модуль (абсолютная величина) числа | ||
Atn (<число>) | Арктангенс | ||
Cos (<число>) | Косинус | ||
Exp (<число>) | Экспонента, т. е. результат возведения основания натурального логарифма в указанную степень | ||
Log(<число>) | Натуральный логарифм | ||
Rnd (<число>) |
Случайное число из интервала
Операнд_N - любое допустимое строковое или численное выражение (которое преобразуется в строковое). Тип данных результата конкатенации строк - String. Если операнд в выражении конкатенации строк имеет значение Empty или Null, VBA интерпретирует этот операнд как строку нулевой длины (строка не содержащая символов). Обратите внимание! Символ (&) операции конкатенации обязательно необходимо отделять пробелом от имени переменной, т.к. в противном случае VBA может интерпретировать этот символ как символ определения типа Long. Оператор сложения в конкатенации строкДля конкатенации строк можно также использовать оператор (+). Этот оператор имеет такой же синтаксис и требования, как и оператор (&). Однако следует понимать, что в VBA основное предназначение оператора (+) - это арифметическое сложение. Поэтому, чтобы избежать двусмысленности чтения программного кода, для конкатенации строк настоятельно рекомендуется использовать именно оператор (&). Приоритеты выполнения операцийМногие из выражений в программной коде являются сложными (составными), т.е. состоят из двух или более выражений. При вычислении сложных выражений VBA следует следующим правилам:
Поделитесь с друзьями или сохраните для себя:
|