Логические операторы в visual basic. Инструкции (операторы) языка VBA. Оператор сложения в конкатенации строк

Эти операторы сравнивают два выражения для определения равны ли они, и если нет то, как они отличаются. Is , IsNot и Like детально обсуждаются на отдельных страницах справки. Отношения операторов сравнения обсуждаются на этой странице.

Result = expression1 comparisonoperator expression2 result = object1 object2 result = string Like pattern

result
Обязательный. Результатом является значение Boolean , представляющее результат сравнения.

expression
Обязательный. Произвольное выражение.

comparisonoperator
Обязательный. Любой оператор сравнения отношения.

object1 , object2
Обязательный. Имя любого ссылочного объекта.

string
Обязательный. Произвольное выражение типа String .

pattern
Обязательный. Любое выражение String или диапазон символов.

В следующей таблице приводится список операторов сравнения и условий, определяющих, является ли result True или False .

Примечание

При сравнении строк строковые выражения вычисляются на основе их алфавитного порядка сортировки, который зависит от параметра Option Compare .

Option Compare Binary задает метод сравнения строк на основе порядка сортировки, определяемого внутренним двоичным представлением символов. Порядок сортировки определяется кодовой страницей. В следующем примере показан типичный порядок двоичной сортировки.

A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø

Option Compare Text задает метод сравнения строк на основе порядка сортировки текста (без учета регистра), определяемого региональными установками приложения. При установке Option Compare Text и сортировке символов в предыдущем примере применяется следующий текстовый порядок сортировки:

(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)

Зависимость от языкового стандарта

При установке Option Compare Text результат сравнения строк может зависеть от языкового стандарта, в котором выполняется приложение. Два символа в одном языковом стандарте могут считаться равными, а в другом нет. При использовании сравнения строк для принятия важных решений, например разрешить ли попытку входа в систему, следует учитывать чувствительность к языковым стандартам. Рассмотрите возможность установки Option Compare Binary или вызова , который учитывает языковой стандарт.

Использование операторов сравнения с выражениями Object не допускается при Option Strict On . При Option Strict Off и либо выражение expression1 , либо expression2 является Object , типы времени выполнения определяют, как они будут сравниваться. В следующей таблице показано сравнение выражений и результаты сравнения в зависимости от типа операндов, определяемых во время выполнения:

При числовом сравнении Nothing приравнивается к 0. При сравнении строк Nothing обрабатывается как "" (пустая строка).

Операторы сравнения (< . <= , > , >= , = , <>) могут быть перегружены ; это означает, что класс или структура могут переопределить их поведение, когда операнд имеет тип этого класса или структуры. Если ваш код использует эти операторы для такого класса или структуры, убедитесь, что вы понимаете его переопределенное поведение. Дополнительные сведения см. в разделе

знак название Описание
= Равно Возвращает 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

Язык VBA был разработан таким образом, чтобы его можно было достаточно легко и быстро изучить, а затем ежедневно использовать. Язык VBA полезен как профессиональным программистам, так и простым пользователям, для автоматизации повседневной рутинной работы. Какой бы не была Ваша цель: упростить повседневную работу или повысить производительность труда, безусловно, язык VBA лучше всего подходит для этих целей, поскольку он разработан специально для работы с приложениями пакета Microsoft Office.

Знание операторов является необходимой основой для изучения любой темы по VBA, т.е. прежде чем браться за изучение языка, стоит достаточное время уделить операторам и функциям.

Операторы VBA

  • AppActivate title, wait - Активизирует открытое приложение по заданному аргументом title заголовку или идентификатору задачи
  • Beep - подача звукового сигнала
  • Call name, argumentlist - Вызов процедуры с названием name. (Поскольку ключевое слово Call необязательно и можно вызвать процедуру, используя только ее имя, этот оператор редко используется в программировании VBA)
  • ChDir path - Заменяет текущую папку папкой, указанной аргументом path
  • Close filenumberlist - Изменяет текущий диск на диск, указанный аргументом drive
  • Const CONSTNAME - Объявляет константой переменную с именем CONSTNAME
  • Date = date - Изменяет системную дату на дату, указанную аргументом date
  • Declare name - Объявляет процедуру из динамически присоединяемой библиотеки (DLL)
  • DefBool letterrange - Оператор уровня модуля, устанавливающий тип Boolean типом данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange (например, DefBool A-F)
  • DefByte letterrange - Задает тип Byte как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefCur letterrange - Задает тип Currency как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefDate letterrange - Задает тип Date как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefDbl letterrange - Задает тип Double как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefInt letterrange - Задает тип Integer как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefLng letterrange - Задает тип Long как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefObj letterrange - Задает тип Object как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefSng letterrange - Задает тип Single как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefStr letterrange - Задает тип String как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DefVar letterrange - Задает тип Variant как тип данных по умолчанию для всех переменных, которые начинаются с букв, указанных аргументом letterrange
  • DeleteStting appname, section, key - Удаляет раздел section или ключ key из реестра Windows
  • Dim varname - Объявляет переменную с именем varname
  • Do:Loop - Выполняет цикл по нескольким операторам до тех пор, пока логическое условие равно True
  • End Keyword - Завершает процедуру, функцию или управляющую структуру
  • Enum name - Оператор уровня модуля, который объявляет переменную перечислимого типа
  • Erase arraylist - Очищает память от динамически выделенного массива или выполняет повторную инициализацию массива с фиксированными размерами
  • Error errornumber - Имитирует ошибку, присваивая объекту Err значение errornumber
  • Event procedurename(arglist) - Оператор может присутствовать только в модуле класса. Он объявляет событие, определенное пользователем
  • Exit keyword - Выход из процедуры, функции или управляющей структуры
  • FileCopy source, destination - Копирует файл source в папку destination (при этом можно изменить имя исходного файла)
  • For Each:Next - Цикл по каждому члену коллекции
  • For:Next - Цикл по нескольким операторам, выполняемый до тем пор, пока счетчик цикла не достигнет заданного значения
  • Function - Объявляет пользовательскую процедуру-функцию
  • Get #filenumber, varname - Производит чтение в переменную из файла ввода-вывода, открытого оператором Open
  • GoSub:Return - Осуществляет вход в подпрограмму, описанную в процедуре, и выход из нее. (Использование этого оператора не рекомендуется, поскольку создание отдельной процедуры позволит сделать код более простым для понимания)
  • GoTo line - Передает управление на строку кода, на которую указывает метка line
  • If:Then:Else - Выполняет один из двух фрагментов кода на основе результата логической проверки
  • Imlements InterfaceName, Class - Определяет название интерфейса или класса, который будет реализован в модуле класса
  • Input #filenumber, varlist - Производит чтение из файла ввода-вывода в переменные
  • Kill pathname - Удаляет файл pathname с диска
  • Let varname = expression - Устанавливает переменную varname равной выражению expression. Ключевое слово Let необязательно и практически никогда не используется
  • Line Input #filenumber, var - Производит чтение одной строки из файла ввода-вывода и сохраняет ее в строковой переменной
  • Load - Загружает форму в память, но не выводит ее на экран
  • Lock #filenumber, recordrange - Управляет доступом к файлу ввода-вывода
  • LSet stringvar = string - Размещает строку, начиная с крайнего слева символа, в переменной типа String. При этом размер переменной не изменяется
  • LSet var1 = var2 - Копирует переменную одного пользовательского типа в переменную другого, но совместимого, пользовательского типа
  • Mid - Заменяет заданное количество символов в строковой переменной символами из другой строки
  • MidB - Побайтно заменяет символы в строковой переменной символами из другой строки
  • MkDir path - Создает папку с именем path
  • Name oldpathname as newpathname - Изменяет имя файла или папки
  • On Error - Задает способ обработки ошибок
  • On:GoSub, On:GoTo - Передает управление заданной строке на основе результата выражения
  • Open pathname, : - Открывает файл для ввода-вывода
  • Option Base 0|1 - Задает (на уровне модуля) для массивов установленную по умолчанию нижнюю границу (номер первого элемента)
  • Option Compare Text|Binary - Определяет (на уровне модуля) установленный по умолчанию режим сравнения строк
  • Option Explicit - Принуждает программиста к явному объявлению переменных. Введите этот оператор на уровне модуля
  • Option Private - Указывает, что модуль закрыт, и к нему нельзя обратиться из процедур, расположенных в других модулях. Введите оператор на уровне модуля
  • Print #filenumber - Производит запись в файл ввода-вывода
  • Private varname - Объявляет, что переменная varname будет закрытой, и ею можно будет пользоваться только в модуле, в котором она объявлена. Введите оператор на уровне модуля
  • Property Get - Объявляет процедуру свойства, которая будет принимать значения этого свойства
  • Property Let - Присваивает значение свойству в процедуре свойства
  • Property Set - Устанавливает ссылку на объект в процедуре свойства
  • Public varname - Открывает доступ к переменной varname для всех процедур, содержащихся в модуле
  • Put #filenumber, varname - Записывает данные из переменной varname а файл ввода-вывода
  • RaiseEvent eventname, arguments - Вызывает событие с именем eventname
  • Randomize number - Инициализирует генератор случайных чисел. Пропустить аргумент number, чтобы каждый раз инициализировать его разными начальными числами
  • ReDim varname - Повторно выделяет память для динамического массива
  • Rem comment - Указывает VBA, что следующий за оператором текст является комментарием. Вместо этого оператора чаще используется символ апострофа
  • Reset - Закрывает все файлы ввода-вывода, которые были ранее открыты оператором Open
  • Resume - После возникновения ошибки возобновляет выполнение программы со строки, в которой возникла ошибка
  • RmDir path - Удаляет папку
  • RSet stringvar = string - Записывает строку в строковую переменную, выравнивая символы по правому краю
  • SaveSetiing appname, : - Создает или сохраняет установки в реестре Windows
  • Seek #filenumber, position - Устанавливает текущую позицию в файле ввода-вывода
  • Select Case - Выполняет группу операторов на основе значения выражения
  • SendKeys string, wait - Передает в активное приложение нажатия клавиш, заданные строкой string так, как будто они были введены с клавиатуры
  • Set objectvar = object - Присваивает объект object объектной переменной с именем objectvar
  • SetAttr pathname, attr - Задает атрибуты доступа, определенные аргументом attr (например, vbReadOnly) для файла, заданного аргументом pathname
  • Static varname - Объявляет (на уровне модуля), что переменная varname будет сохранять свои значения все время, пока будет выполняться код модуля
  • Stop - Переводит VBA в режим паузы
  • Sub - Объявляет процедуру
  • Time = time - Устанавливает системное время равным аргументу time
  • Type varname - Объявляет пользовательский тип данных. (Используется только на уровне модуля)
  • Unload - Удаляет форму из памяти
  • Unlock #filenumber, recordrange - Удаляет атрибуты доступа для файла ввода-вывода
  • While:Wend - Выполняет цикл по группе операторов до тех пор, пока логическое условие истинно
  • Width #filenumber, width - Задает ширину строки для файла ввода-вывода
  • With:End With - Выполняет группу операторов для заданного объекта
  • Write #filenumber - Производит запись данных в файл ввода-вывода

Операторы VBA: арифметические, логические, сравнения, присвоения

Оператор - это наименьшая способная выполняться единица кода VBA. Оператор может объявлять или определять переменную, устанавливать параметр компилятора VBA или выполнять какое-либо действие в программе.

Арифметических операторов в VBA всего 7. Четыре стандартных: сложение (+), вычитание (-), умножение (*), деление (/) и еще три:

  • возведение в степень (^), например 2^3 = 8 ;
  • целочисленное деление (\). Делит первое число на второе, отбрасывая (не округляя) дробную часть. Например, 5\2 = 2 ;
  • деление по модулю (Mod). Делит первое число на второе, возвращая только остаток от деления. Например, 5 Mod 2 = 1 .

Оператор присвоения в VBA - знак равенства. Можно записывать так:

Let nVar = 10

а можно еще проще:

nVar = 10

Во втором случае не путайте знак равенства с оператором равенства.

Выражение

nVar = 10

значит "присвоить переменной nVar значение 10", а если строка выглядит так:

If (nVar = 10)

то это значит "если значение переменной nVar равно 10".

Если переменной нужно назначить объект, то делается это другими способами.

Операторов сравнения в VBA всего 8:

  • равенство (=), например, If (nVar = 10) ;
  • больше, чем и меньше, чем (> и <), например, If (nVar > 10) ;
  • больше или равно и меньше или равно (>= и <=), например, If (nVar >= 10) ;
  • не равно (<>), например, If(nVar<>10) ;
  • сравнение объектов (Is). Определяет, ссылаются объектные переменные на тот же объект или на разные, например, If(obj1 is obj2) ;
  • подобие (Like). Сравнивает строковый объект с шаблоном и определяет, подходит ли шаблон.

Операторы сравнения всегда возвращают true или false - true, если утверждение истинно, и false, если ложно.

Немного про сравнение строковых значений:

  • при сравнении строковых значений регистр учитывается;
  • пробелы в строковых значениях также учитываются;
  • при сравнении текстовых строк на больше/меньше по умолчанию сравниваются просто двоичные коды символов - какие больше или меньше. Если нужно использовать тот порядок, который идет в алфавите, то можно воспользоваться командой

Option Compare Text

Чуть подробнее про оператор Like. Общий его синтаксис выглядит как

Выражение1 Like Выражение2

При этом Выражение1 - любое текстовое выражение VBA, а Выражение2 - шаблон, который передается оператору Like. В этом шаблоне можно использовать специальные подстановочные символы (см. Табл. 3.1)

Табл. 3.1 Подстановочные символы для оператора LIKE

Очень часто при проверке нескольких условий используются логические операторы:

  • AND - логическое И, должны быть истинными оба условия;
  • OR - логическое ИЛИ, должно быть истинным хотя бы одно из условий;
  • NOT - логическое отрицание, возвращает TRUE, если условие ложно;
  • XOR - логическое исключение. В выражении E1 XOR E2 возвращает TRUE, если только E1 = TRUE или только E2 = TRUE, иначе - FALSE;
  • EQV - эквивалентность двух выражений, возвращает TRUE, если они имеют одинаковое значение;
  • IMP - импликация, возвращает FALSE, если E1 = TRUE и E2 = FALSE, иначе - TRUE.

Помнить нужно про AND, OR, NOT, остальные логические операторы используются редко.

Почти в любой программе VBA используются операторы конкатенации. В VBA их два - + или &. Рекомендуется всегда использовать &, потому что:

  • при использовании & производится автоматическое преобразование числовых значений в строковые - нет опасности допустить ошибку;
  • при использовании оператора + сложение строкового значения со значением типа Null дает Null.

MsgBox "Сообщение пользователю" & vUserName

Порядок применения операторов можно регулировать при помощи круглых скобок.

Логические операторы VBA используются для объединения результатов отдельных логических выражений, чтобы создать сложные критерии для принятия решений в процедуре (таблица Б.3).

Таблица Б.3 – Логические операторы VBA

Логический

Синтаксис

Имя/Описание

оператор

El And E2

Конъюнкция . True, если оба Е1 и Е2

имеют значение True, иначе – False

El Or E2

Дизъюнкция . True, если одно выра-

жение или оба (Е1 и Е2) являются

равными True; иначе – False

Not El

Отрицание . True, если Е1 имеет зна-

чение False; False, если El является

равным True

El Xor E2

Исключение . True, если Е1 и Е2

имеют разные значения; иначе –

El Eqv E2

Эквивалентность . True,если Е1 име-

ет то же самое значение, что и Е2;

иначе – False

El Imp E2

Импликация . False, когда Е1 является

равным True и Е2 равно False; иначе

True.

Операнды Е в этой таблице представляет собой любое допустимое выражение с результатом типа Boolean, такое как операция сравнения.

Приоритеты выполнения операций при вычислении сложных выражений

Сложное (составное) выражение (complex expression) – это любое выражение, образованное из двух или более выражений. В таблице Б.4 собраны операции по группам в порядке убывания приоритета, то есть чем ниже расположена группа, тем позже выполняются указанные в ней операции. Для изменения этого порядка применяются круглые скобки. Операции одного уровня выполняются слева направо в том порядке, в котором они записаны в выражении.

Таблица Б.4 – Приоритеты операций VBA

Оператор

Комментарии

Возведение в степень, наивысший приоритет

Унарный минус - изменение знака числа

Умножение и деление имеют равные приоритеты; они вы-

Деление нацело

Остаток от деления нацело

Сложение и вычитание имеют равный приоритет; они вы-

числяются по мере появления в выражении слева направо

Всякая конкатенация строк выполняется после любых

арифметических операций в выражении и перед любыми

операциями сравнения или логическими операциями

<, <=, >, >=,

Все операторы сравнения имеют равные приоритеты и вы-

числяются по мере появления в выражении слева направо.

Используйте круглые скобки для группирования операто-

ров сравнения в выражениях

Логические

Not And Or Xor Eqv Im p – имеют низший приоритет

операторы

Приложение В Математические функции VBA

VBA предоставляет стандартный набор математических функций приведенный в таблице В.1.

Таблица B.1 – Математические функции VBA

Возвращает / действие

Возвращает абсолютное значение N

Косинус угла N, где N – это угол, измеренный в ра-

Возвращает синус угла; N – это угол, измеренный в

радианах

Возвращает тангенс угла; N – угол в радианах

Возвращает арктангенс N как угол в радианах

Возвращает константу е, возведенную в степень N (е –

это основание натуральных логарифмов и она (при-

близительно) равна 2,718282

Возвращает целую часть N. Fix не округляет число, а

отрицательным, Fix возвращает ближайшее отрица-

тельное целое большее, чем или равное N

Возвращает целую часть N. Int не округляет число, а

отбрасывает любую дробную часть. Если N является

отрицательным, Int возвращает ближайшее отрица-

тельное целое меньшее, чем или равное N

Возвращает натуральный логарифм N

Возвращает случайное число; аргумент является не-

обязательным. Используйте функцию Rnd только

после инициализации VBA-генератора случайных чи-

сел оператором Randomize

Возвращает знак числа: –1, если N – отрицательное;

1, если N –положительное; 0, если N равно 0

Возвращает корень квадратный из N. VBA отображает

ошибку исполнения, если N – отрицательное

Операнд N означает любое численное выражение? допустимое в

Аргумент тригонометрических функции (синуса, косинуса и тангенса) задается в радианах, а не в градусах. Обратная тригонометрическая функция A t n (x ) возвращает в программу значение угла в радианах от -π/2 до π/2, тангенс которого равен значению арифметического выражения х .

Связь между радианной и градусной мерами угла выражается через иррациональное число π ≈ 3,14159265358979323846.

Радианы=

Градусы× π

Градусы=

Радианы× 180

Для перевода градусов в радианы можно также использовать встроенную функцию Excel - Application.Radians(x ), где x – угол, за-

данный в радианах.

Для получения числового значения константы π с точностью 15 цифр мантиссы можно использовать встроенную функцию Excel Application.Pi(), либо функцию VBA арктангенс

Pi= Application.Pi() либо Pi=4*Atn(1)

Примеры записи тригонометрических функций

Похожие публикации