Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по VBA.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
592.38 Кб
Скачать

Id As Integer

Name As String * 20

End Type

Для файлов, открытых в режиме Random, Seek указывает следующую запись.

Dim MyRecord As Record, MaxSize, RecordNumber ' Объявляет переменные.

' Открывает файл произвольного доступа.

Open "TESTFILE" For Random As #1 Len = Len(MyRecord)

MaxSize = LOF(1) \ Len(MyRecord) ' Определяет число записей в файле.

' Последовательно читает все записи, начиная с последней.

For RecordNumber = MaxSize To 1 Step - 1

Seek #1, RecordNumber ' Указывает номер записи.

Get #1, , MyRecord ' Читает запись.

Next RecordNumber

Close #1 ' Закрывает файл.

Для файлов, открытых в других режимах, Seek указывает номер байта, с которого будет начато выполнение следующей операции. Предположим, что файл TESTFILE содержит несколько строк текста.

Dim MaxSize, NextChar, MyChar

Open "TESTFILE" For Input As #1 ' Открывает файл для чтения.

MaxSize = LOF(1) ' Определяет размер файла в байтах.

' Последовательно читает все записи, начиная с последней.

For NextChar = MaxSize To 1 Step -1

Seek #1, NextChar ' Указывает номер байта.

MyChar = Input(1, #1) ' Читает символ.

Next NextChar

Close #1 ' Закрывает файл.

Шаг 61 - Инструкция Select Case

Выполняет одну из нескольких групп инструкций в зависимости от значения выражения.

Select Case выражение

[Case списокВыражений-n

[инструкции-n]] ...

[Case Else

[инструкции_else]]

End Select

Параметры выражение : Обязательный. Любое числовое выражение или строковое выражение. списокВыражений-n : Обязательный при наличии предложения Case. Список с разделителями, состоящий из одной или нескольких форм следующего вида: выражение, выражение To выражение, Is операторСравнения выражение. Ключевое слово To задает диапазон значений. При использовании ключевого слова To перед ним должно находиться меньшее значение. Ключевое слово Is с операторами сравнения (кроме Is и Like) задает диапазон значений. Если ключевое слово Is не указано, оно вставляется по умолчанию. инструкции-n : Необязательный. Одна или несколько инструкций, выполняемых в том случае, если выражение совпадает с любым компонентом списка списокВыражений-n. инструкции_else : Необязательный. Одна или несколько инструкций, выполняемых в том случае, если выражение не совпадает не совпадает ни с одним из предложений Case.

Замечания Если выражение совпадает с любым выражением из спискаВыражений в предложении Case, выполняются все инструкции, следующие за данным предложением Case до следующего предложения Case, или, для последнего предложения, до инструкции End Select. Затем управление передается инструкции, следующей за End Select. Если выражение совпадает с выражениями из списка в нескольких предложениях Case, выполняется только первый подходящий набор инструкций. Предложение Case Else задает список инструкции_else, которые будут выполнены, если не обнаружено ни одно совпадение выражения и компонента списокВыражений ни в одном из остальных предложений Case. Хотя данное предложение не является обязательным, рекомендуется помещать предложение Case Else в блок Select Case, чтобы предусмотреть неожиданные значения выражения. Если ни в одном предложении Case списокВыражений не содержит компонента, отвечающего аргументу выражение, и отсутствует инструкция Case Else, выполнение продолжается с инструкции, следующей за инструкцией End Select. В каждом предложении Case допускается использование нескольких выражений или диапазонов. Например допустима следующая строка:

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

Следует отличать оператор сравнения Is от ключевого слова Is, используемого в инструкции Select Case. Имеется также возможность задать диапазоны или несколько выражений для строковых значений. В следующем примере предложение Case выполняется для строк, которые точно совпадают со строкой "все", для строк, лежащих в алфавитном порядке между "орехи" и "яблоки", и для строк со значением, равных текущему значению переменной TestItem:

Case "все", "орехи" To "яблоки", TestItem

Допускаются вложенные инструкции Select Case. Каждой вложенной инструкции Select Case должна соответствовать инструкция End Select.

Пример В данном примере инструкция Select Case используется для анализа значения переменной. Второе предложение Case содержит значение анализируемой переменной и следовательно выполняется только инструкция, связанная с этим предложением.

Dim Number

Number = 8 ' Инициализирует переменную.

Select Case Number ' Анализирует число.

Case 1 To 5 ' Число между 1 и 5.

Debug.Print "Между 1 и 5"

' Это предложение Case является единственным истинным.

Case 6, 7, 8 ' Число между 6 и 8.

Debug.Print "Между 6 и 8"

Case Is > 8 And Number < 11 ' 9 или 10.

Debug.Print "Больше 8"

Case Else ' Другие значения.

Debug.Print "Вне интервала 1 -- 10"

End Select

Шаг 62 - Инструкция SendKeys

Передает активному окну одно или несколько нажатий клавиш, как если бы они были нажаты на клавиатуре.

SendKeys string[, wait]

Параметры string : Обязательный. Строковое выражение, указывающее набор нажатий клавиш, который следует передать. Wait : Необязательный. Значение типа Boolean, указывающее режим ожидания. Если этот аргумент имеет значение False (значение по умолчанию), управление возвращается вызывающей процедуре сразу после завершения передачи нажатий клавиш. Если этот аргумент имеет значение True, управление возвращается вызывающей процедуре только после завершения обработки переданных нажатий клавиш.

Замечания Для описания нажатий клавиш используются коды, состоящие из одного или нескольких символов. В качестве кода клавиши, соответствующей печатному символу, используется сам символ. Например, нажатию клавиши string "A". Для описания нескольких нажатий клавиш следует последовательно включить в string коды каждой клавиши. Например, последовательности клавиш A, B и C соответствует "ABC". Символы плюс (+), "крышка" (^), знак процентов (%), тильда (~) и круглые скобки ( ) имеют специальное значение для инструкции SendKeys. Чтобы указать передачу одного из этих символов, следует заключить его в фигурные скобки ({}). Например, знаку плюс соответствует код {+}. Квадратные скобки ([ ]) не имеют специального значения для инструкции SendKeys, однако, их также необходимо заключать в фигурные скобки, поскольку они могут иметь специальное значение для других приложений, например, при динамическом обмене данными (DDE). Фигурным скобкам соответствуют коды {{} и {}}. Для описания нажатий клавиш, которые не отображаются на экране (например, ENTER или TAB) или вызывают выполнение определенных действий, следует использовать перечисленные ниже коды:

BACKSPACE {BACKSPACE}, {BS} или {BKSP}

BREAK {BREAK}

CAPS LOCK {CAPSLOCK}

DEL или DELETE {DELETE} или {DEL}

СТРЕЛКА ВНИЗ {DOWN}

END {END}

ENTER {ENTER}или ~

ESC {ESC}

HELP {HELP}

HOME {HOME}

INS или INSERT {INSERT} или {INS}

СТРЕЛКА ВЛЕВО {LEFT}

NUM LOCK {NUMLOCK}

PAGE DOWN {PGDN}

PAGE UP {PGUP}

PRINT SCREEN {PRTSC}

СТРЕЛКА ВПРАВО {RIGHT}

SCROLL LOCK {SCROLLLOCK}

TAB {TAB}

СТРЕЛКА ВВЕРХ {UP}

F1 {F1}

F2 {F2}

F3 {F3}

F4 {F4}

F5 {F5}

F6 {F6}

F7 {F7}

F8 {F8}

F9 {F9}

F10 {F10}

F11 {F11}

F12 {F12}

F13 {F13}

F14 {F14}

F15 {F15}

F16 {F16}

Для описания сочетания клавиши с клавишами SHIFT, CTRL или ALT следует указать один из перечисленных ниже кодов перед кодом обычной клавиши:

SHIFT +

CTRL ^

ALT %

Для описания сочетаний нескольких клавиш с клавишами SHIFT, CTRL или ALT следует заключить коды этих клавиш в круглые скобки, а перед ними указать код, соответствующий клавише SHIFT, CTRL или ALT. Например, нажатию клавиш E и C при нажатой и удерживаемой клавише SHIFT соответствует "+(EC)". Для указания нажатия клавиши E при нажатой клавише SHIFT, за которым следует нажатие клавиши C без удерживания клавиши SHIFT, следует использовать код "+EC". Для описания нескольких последовательных нажатий одной клавиши следует использовать синтаксис {клавиша число}. Пробел между элементами клавиша и число является обязательным. Например, {LEFT 42} означает "нажмите клавишу СТРЕЛКА ВЛЕВО 42 раза; {h 10} означает "нажмите клавишу H 10 раз". Инструкция SendKeys предназначена для передачи нажатий клавиш только приложениям, разработанным для работы в среде Microsoft Windows. Кроме того, эта инструкция не позволяет передать нажатие клавиши PRINT SCREEN {PRTSC} ни в одно приложение.

Пример В данном примере используется функция Shell для запуска приложения "Калькулятор", имеющийся в Microsoft Windows. Затем с помощью инструкции SendKeys имитируется нажатие клавиш для введения чисел и последующего выхода из калькулятора. Инструкция SendKeys не используется на Macintosh. (Для проработки примера вставьте его в процедуру с помощью буфера, а затем выполните эту процедуру. Поскольку инструкция AppActivate передает фокус приложению "Калькулятор", этот пример нельзя выполнить в пошаговом отладочном режиме.)

Dim ReturnValue, I

ReturnValue = Shell("CALC.EXE", 1) ' Запускает калькулятор.

AppActivate ReturnValue ' Активизирует калькулятор.

For I = 1 To 100 ' Организует цикл.

SendKeys I & "{+}", True ' Передает данные калькулятору

Next I ' для вычисления суммы.

SendKeys "=", True ' Окончательный результат.

SendKeys "%{F4}", True ' ALT+F4 закрывает калькулятор.

Шаг 63 - Инструкция Set

Присваивает ссылку на объект переменной или свойству.

Set объектнаяПеременная = {[New] объектноеВыражение | Nothing}

Параметры объектнаяПеременная : Обязательный. Имя переменной или свойства, удовлетворяющее стандартным правилам именования переменных. New : Необязательный. Ключевое слово New обычно используется при описании, чтобы включить возможность неявного создания нового экземпляра объекта. Ключевое слово New в инструкции Set задает создание нового экземпляра класса. Если объектнаяПеременная содержит ссылку на объект, эта ссылка освобождается при новом присвоении. Не допускается использование ключевого слова New для создания новых экземпляров любого внутреннего типа данных и для создания зависимых объектов. ОбъектноеВыражение : Обязательный. Выражение, состоящее из имени объекта, другой описанной переменной того же объектного типа или функции или метода, которые возвращают объект того же объектного типа. Nothing : Необязательный. Разрывает связь объектнойПеременной с каким-либо определенным объектом. При этом объектнаяПеременная получает значение Nothing, освобождающее все системные ресурсы и ресурсы памяти, выделенные для объекта, на который имелась ссылка, если никакие другие переменные также не содержат на него ссылок.

Замечания ОбъектнаяПеременная должна иметь объектный тип, соответствующий объекту, который будет ей присвоен. Инструкции Dim, Private, Public, ReDim и Static описывают только переменную, которая ссылается на объект. Ссылка на реальный объект не возникает до присвоения определенного объекта в инструкции Set. В следующем примере показано, как инструкция Dim используется для описания массива с типом Form1. Реально не существует ни одного экземпляра объекта Form1. Затем с помощью инструкции Set ссылка на новый экземпляр объекта Form1 присваивается переменной myChildForms. Такая программа позволяет создать дочерние формы в многооконном приложении (MDI).

Dim myChildForms(1 to 4) As Form1

Set myChildForms(1) = New Form1

Set myChildForms(2) = New Form1

Set myChildForms(3) = New Form1

Set myChildForms(4) = New Form1

Обычно при использовании инструкции Set для присвоения переменной ссылки на объект, не создается копия объекта для этой переменной. Вместо этого создается ссылка на объект. Несколько объектных переменных могут ссылаться на один и тот же объект. Поскольку эти переменные являются ссылками (а не его копиями) на объект, любые изменения этого объекта отражаются на всех переменных, которые ссылаются на него. Однако если в инструкции Set используется ключевое слово New, то в самом деле создается новый экземпляр этого объекта.

Пример В данном примере инструкция Set используется для присвоения переменным ссылок на объект. Предполагается, что YourObject является допустимым объектом, обладающим свойством Text.

Dim YourObject, MyObject, MyStr

Set MyObject = YourObject ' Присваивает ссылку на объект.

' MyObject и YourObject ссылаются на один и тот же объект.

YourObject.Text = "Всем привет" ' Инициализирует свойство.

MyStr = MyObject.Text ' Возвращает "Всем привет".

' Разрыв связи: MyObject больше не ссылается на YourObject.

Set MyObject = Nothing ' Освобождает объект.

Шаг 64 - Инструкция SetAttr

Задает атрибуты файла.

SetAttr pathname, attributes

Параметры pathname : Обязательный. Строковое выражение, указывающее имя файла; может содержать имя каталога или папки и диска. Attributes : Обязательный. Константа или числовое выражение, задающее атрибуты файла.

vbNormal 0 Обычный (по умолчанию).

vbReadOnly 1 Только чтение.

vbHidden 2 Скрытый.

VbSystem 4 Системный.

vbArchive 32 Файл был изменен после последнего резервирования.

Замечания При попытке изменения атрибутов открытого файла возникает ошибка выполнения.

Пример В данном примере инструкция SetAttr используется для установки атрибутов файла.

SetAttr "TESTFILE", vbHidden ' Устанавливает атрибут "скрытый".

SetAttr "TESTFILE", vbHidden + vbReadOnly ' Устанавливает атрибуты "скрытый" и "только для чтения".

Шаг 65 - Инструкция Static

Применяется на уровне процедуры для описания переменных и выделения памяти. Переменные, описанные с помощью инструкции Static, сохраняют свои значения, пока выполняется программы..

Static имяПеременной[([индексы])] [As [New] тип] [, имяПеременной[([индексы])]

[As [New] тип]] . . .

Параметры имяПеременной : Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных. Индексы : Необязательный. Размерности переменной массива; допускается описание до 60 размерностей. Аргумент индексы использует следующий синтаксис:

[нижний To] верхний [,[нижний To] верхний] . . .

Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base. Если отсутствует инструкция Option Base, нижняя граница массива равняется нулю. New : Необязательный. Ключевое слово обеспечивает возможность неявного создания нового экземпляра объекта. При использовании ключевого слова New при описании объектной переменной задается создание нового экземпляра объекта при ссылке на него. Поэтому нет необходимости присваивать ссылку на объект с помощью инструкции Set. Ключевое слово New нельзя использовать для описания переменных любых внутренних типов данных, а также для описания экземпляров зависимых объектов. тип Необязательный. Тип данных переменной; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String, (для строк переменной длины), String * длина (для строк фиксированной длины), Object, Variant, определяемый пользователем тип или объектный тип. Для каждой описываемой переменной следует использовать отдельное предложение As тип.

Замечания После запуска программы в модуле переменные, описанные с помощью инструкции Static, сохраняют свои значения до сброса или перезапуска модуля. Инструкция Static применяется в нестатических процедурахs для явного описания переменных, видимых только в этих процедурах, но имеющих время жизни, равное времени жизни модуля, в котором эти процедуры описаны. Инструкция Static в процедуре предназначена для описания типа данных переменной, которая сохраняет свое значение в промежутках между вызовами процедуры. Например, в следующей инструкции описывается массив целых чисел фиксированного размера:

Static EmployeeNumber(200) As Integer

Ниже приводится описание переменной для нового экземпляра листа электронной таблицы:

Static X As New Worksheet

Если ключевое слово New не используется при описании объектной переменной, то перед использованием объекта необходимо присвоить имеющийся объект с помощью инструкции Set переменной, ссылающейся на этот объект. До присвоения объекта описанная объектная переменная имеет специальное значение Nothing, которое указывает, что переменная не содержит ссылку на какой-либо определенный экземпляр объекта. При включении ключевого слова New в описание новый экземпляр объекта создается при первой ссылке на объект. Если тип данных или тип объекта не задан, и в модуле отсутствует инструкция DefТип, по умолчанию переменная получает тип Variant. Инструкция Static и ключевое слово Static похожи, но используются для получения разных результатов. При описании процедуры с ключевым словом Static (например, Static Sub CountSales ()), память для всех локальных переменных процедуры выделяется один раз, и значения этих переменных сохраняются на все время выполнения программы. Для нестатических процедур память для переменных выделяется при каждом вызове процедуры и освобождается при завершении процедуры. Инструкция Static применяется для описания переменных в нестатических процедурах, чтобы сохранить их значения на время выполнения программы. При инициализации переменных числовая переменная получает значение 0, строка переменной длины получает значение пустой строки (""), а строка фиксированной длины заполняется нулями. Переменные типа Variant получают при инициализации значение Empty. Каждый элемент переменной с типом, определяемым пользователем, при инициализации получает значение, которые он получил бы, если бы являлся одиночной переменной. При использовании инструкции Static ее обычно помещают в начало процедуры вместе с другими инструкциями описания, такими как Dim.

Пример В данном примере инструкция Static используется для сохранения значения переменной на все время выполнения модуля.

' Описание функции.

Function KeepTotal(Number)

' Только переменная Accumulate сохраняет свое значение

' от вызова к вызову.

Static Accumulate

Accumulate = Accumulate + Number

KeepTotal = Accumulate

End Function

' Описание функции Static.

Static Function MyFunction(Arg1, Arg2, Arg3)

' Все локальные переменные сохраняют свои значения

' между вызовами функции.

Accumulate = Arg1 + Arg2 + Arg3

Half = Accumulate / 2

MyFunction = Half

End Function

Шаг 66 - Инструкция Stop

Приостанавливает выполнение.

Stop

Замечания Инструкция Stop может помещаться в любом месте процедуры для приостановки выполнения. Использование инструкции Stop аналогично установке в программе точки останова. Инструкция Stop приостанавливает выполнение программы, но, в отличие от инструкции End, она не закрывает все файлы и не очищает все переменные, если только не находится в откомпилированном выполняемом файле (.exe).

Пример В данном примере инструкция Stop используется для организации паузы на каждой итерации цикла For...Next.

Dim I

For I = 1 To 10 ' Начинает цикл For...Next.

Debug.Print I ' Выводит I в окно отладки.

Stop ' Пауза в конце каждой итерации.

Next I

Шаг 67 - Инструкция Sub

Приостанавливает выполнение.

[Private | Public] [Static] Sub имя [(списокАргументов)]

[инструкции]

[Exit Sub]

[инструкции]

End Sub

Параметры Public : Необязательный. Указывает, что процедура Sub доступна для всех других процедур во всех модулях. При использовании в личном модуле (модуле, который содержит инструкцию Option Private) такая процедура является недоступной вне проекта. Private : Необязательный. Указывает, что процедура Sub доступна для других процедур только того модуля, в котором она описана. Static : Необязательный. Указывает, что локальные переменные процедуры Sub сохраняются в промежутках времени между вызовами этой процедуры. Атрибут Static не действует на переменные, описанные вне процедуры Sub, даже если они используются в процедуре. Имя : Обязательный. Имя процедуры Sub, удовлетворяющее стандартным правилам именования переменных. списокАргументов Необязательный. Список переменных, представляющий аргументы, которые передаются в процедуру Sub при ее вызове. Имена переменных разделяются запятой.

  • Optional - Необязательный. Ключевое слово, указывающее, что аргумент не является обязательным. При использовании этого элемента все последующие аргументы, которые содержит списокАргументов, также должны быть необязательными и быть описаны с помощью ключевого слова Optional. Все аргументы, описанные как Optional, должны иметь тип Variant. Не допускается использование ключевого слова Optional для любого из аргументов, если используется ключевое слово ParamArray.

  • ByVal - Необязательный. Указывает, что этот аргумент передается по значению.

  • ByRef - Необязательный. Указывает, что этот аргумент передается по ссылке. Описание ByRef используется в Visual Basic по умолчанию.

  • ParamArray - Необязательный. Используется только в качестве последнего элемента в списке списокАргументов для указания, что конечным аргументом является описанный как Optional массив значений типа Variant. Ключевое слово ParamArray позволяет задавать произвольное количество аргументов. Оно не может быть использовано со словами ByVal, ByRef или Optional.

  • имяПеременной 0 Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных.

  • тип - Необязательный. Тип данных аргумента, переданного в процедуру; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только строки переменной длины), Object, Variant. Если отсутствует ключевое слово Optional, могут быть также указаны определяемый пользователем тип или объектный тип.

  • поУмолчанию - Необязательный. Любая константа или выражение, дающее константу. Используется только вместе с параметром Optional. Если указан тип Object, единственным значением по умолчанию может быть значение Nothing.

Инструкции : Необязательный. Любая группа инструкций, выполняемых в процедуре Sub.

Замечания Процедуры Sub, тип которых не указан явно с помощью слов Public или Private, являются общими по умолчанию. Если не используется слово Static, значения локальных переменных не сохраняются между вызовами процедур. Допускаются рекурсивные процедуры Sub; т.е. они могут вызывать сами себя для выполнения определенных задач. Однако рекурсия может приводить к переполнению стека. Ключевое слово Static обычно не используется с рекурсивными процедурами Sub. Все выполняемые команды должны содержаться в процедурах. Не допускается определение процедуры Sub внутри другой процедуры Sub, Function или Property. Инструкция Exit Sub приводит к немедленному выходу из процедуры Sub. Выполнение программы продолжается с инструкции, следующей за инструкцией, содержащей вызов процедуры Sub. В любом месте процедуры Sub допускается наличие любого числа инструкций Exit Sub. Подобно процедурам Function, процедура Sub является самостоятельной процедурой, которая может получать аргументы, выполнять последовательность инструкций и изменять значения своих аргументов. Однако в отличие от процедуры Function, которая возвращает значение, процедура Sub не может применяться в выражении. Процедура Sub вызывается в выражении по своему имени, за которым следует список аргументов в скобках. Для получения дополнительных сведений о вызовах процедур Sub см. описание инструкции Call. Переменные, используемые в процедурах Sub, разбиваются на две категории: явно описанные внутри процедуры и не описанные внутри процедуры. Переменные, которые явно описаны в процедуре (с помощью ключевого слова Dim или эквивалентного ему), всегда являются локальными для этой процедуры. Переменные, которые используются, но явно не описаны в процедуре, также являются локальными, если они явно не описаны на более высоком уровне. В процедуре допускается использование переменной, которая явно не описана в этой процедуре, но при этом может возникать конфликт имен, если на уровне модуля был определен элемент с тем же самым именем. Если в процедуре содержится ссылка на неописанную переменную, имя которой совпадает с именем другой процедуры, константы или переменной, то подразумевается, что процедура ссылается на это имя на уровне модуля. Чтобы избежать возникновения конфликтов такого рода, следует пользоваться явным описанием переменных. Для включения обязательного явного описания переменных используется инструкция Option Explicit Для входа или выхода из процедуры Sub нельзя использовать инструкции GoSub, GoTo или Return.

Пример В данном примере инструкция Sub используется для описания имени, аргументов и кода, составляющих основу процедуры Sub.

' Описание процедуры Sub.

' Процедура Sub с двумя аргументами.

Sub SubComputeArea(Length, TheWidth

Dim Area As Double ' Объявляет локальную переменную.

If Length = 0 Or TheWidth = 0 Then

' Если хотя бы один из аргументов равен 0.

Exit Sub ' Немедленно завершает процедуру Sub.

End If

Area = Length * TheWidth ' Вычисляет площадь прямоугольника.

Debug.Print Area ' Выводит полученное значение в окно отладки.

End Sub

Шаг 68 - Инструкция Time

Устанавливает системное время.

Time = время

Параметры время : Обязательный аргумент время может быть любым числовым выражением, строковым выражением или любой комбинацией, которая представляет значение времени.

Замечания Если аргумент время является строкой, инструкция Time пытается преобразовать ее в значение времени, используя разделители компонентов времени, определенные в текущей системе. Если указанную строку не удастся преобразовать в допустимое время, возникает ошибка.

Пример В данном примере инструкция Time используется для изменения системного времени.

Dim MyTime

MyTime = #4:35:17 PM# ' Присваивает время.

Time = MyTime ' Изменяет системное время.

Шаг 69 - Инструкция Type

Применяется на уровне модуля для описания определяемого пользователем типа данных, который содержит один или несколько элементов.

[Private | Public] Type имяПеременной

имяЭлемента [([индексы])] As тип

[имяЭлемента [([индексы])] As тип]

. . .

End Type

Параметры Public : Необязательный. Используется для описания определяемых пользователем типов, которые доступны для всех процедур во всех модулях всех проектов. Private : Необязательный. Используется для описания определяемых пользователем типов, которые доступны только в модуле, в котором выполняется описание. ИмяПеременной : Обязательный. Имя типа, определяемого пользователем, удовлетворяющее правилам именования переменных. ИмяЭлемента : Обязательный. Имя элемента определяемого пользователем типа. Имена элементов также должны соответствовать правилам именования переменных, за исключением того, что для их задания разрешается использовать ключевые слова. индексы Необязательный. Размерности элемента, являющегося массивом. Для задания массива, размеры которого могут изменяться, указываются только скобки. Аргумент индексы использует следующий синтаксис:

[нижний To] верхний [,[нижний To] верхний] . . .

Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base. Если отсутствует инструкция Option Base, нижняя граница массива равняется нулю. Тип : Обязательный. Тип данных элемента; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String(для строк переменной длины), String * длина (для строк фиксированной длины), Object, Variant, другой определяемый пользователем тип или объектный тип.

Замечания Инструкция Type допускает использование только на уровне модуля. После определения типа данных с помощью инструкции Type имеется возможность в любом месте описать переменную этого типа в заданной области определения. Для описания переменной определяемого пользователем типа используются инструкции Dim, Private, Public, ReDim или Static. В стандартных модулях типы данных, определяемые пользователем, по умолчанию являются общими. Видимость этих типов данных может быть изменена с помощью ключевого слова Private. В модулях класса, однако, типы данных, определяемые пользователем, могут быть только личными, и их видимость не может быть изменена с помощью ключевого слова Public. Не допускается появление номеров строк и меток строк в блоках Type...End Type. Типы данных, определяемые пользователями, могут использоваться с записями данных, которые часто состоят из набора связанных элементов различного типа. В следующем примере демонстрируется использование массивов фиксированного размера в типах данных, определяемых пользователем:

Type StateData

CityCode (1 To 100) As Integer ' Описывает статический массив.

County As String * 30

End Type

Dim Washington(1 To 100) As StateData

В предыдущем примере StateData включает статический массив CityCode, а запись Washington имеет одинаковую со StateData структуру. При описании массива фиксированного размера с типом, определяемым пользователем, его размерности должны описываться с помощью числовых литералов или констант, а не с помощью переменных. Значение, задаваемое в инструкции Option Base, определяет нижнюю границу индексов для массивов, содержащихся в типах данных, определяемых пользователем.

Пример В данном примере инструкция Type используется для определения типа данных. Инструкция Type используется только на уровне модуля. При появлении в модуле класса инструкции Type должно предшествовать ключевое слово Private.

Type EmployeeRecord ' Тип, определенный пользователем.

ID As Integer ' Элементы типа данных.

Name As String * 20

Address As String * 30

Phone As Long

HireDate As Date

End Type

Sub CreateRecord()

Dim MyRecord As EmployeeRecord ' Объявляет переменную.

' Присвоение значений элементам переменной EmployeeRecord

' должно выполняться в процедуре.

MyRecord.ID = 12003 ' Присваивает значение элементу.

End Sub

Шаг 70 - Инструкция Unload

Удаляет объект из памяти.

Unload объект

Параметры объект : Обязательный прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".

Замечания Когда объект выгружается, он удаляется из памяти, и вся память связанная с объектом, распределяется заново. Пока объект опять не помещен в память с помощью инструкции Load, пользователь не может взаимодействовать с ним, и взаимодействие ни программным образом также невозможно.

Пример В следующем примере предполагается, что в программе определены пользователем две формы UserForms. Если произошло событие "Инициализация" (Initialize) для формы UserForm1, форма UserForm2 загружается и выводится на экран. Когда пользователь выбирает при помощи мыши UserForm2, она выгружается, и появляется форма UserForm1. Если же выбирается UserForm1, то она, в свою очередь, выгружается.

' Процедура события "Инициализация" (Initialize)

' для формы UserForm1.

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Событие "Нажатие кнопки" (Click) для формы UserForm2

Private Sub UserForm_Click()

Unload UserForm2

End Sub

' Событие "Нажатие кнопки" (Click) для формы UserForm1

Private Sub UserForm_Click()

Unload UserForm1

End Sub

Шаг 71 - Инструкция While...Wend

Выполняет последовательность инструкций, пока заданное условие имеет значение True.

While условие

[инструкции]

Wend

Параметры условие : Обязательный. Числовое выражение или строковое выражение, которое имеет значение True или False. Если условие имеет значение Null, условие рассматривается как имеющее значение False. Инструкции : Необязательный. Одна или несколько инструкций, выполняемых, пока условие имеет значение True.

Замечания Если условие имеет значение True, выполняются все инструкции до инструкции Wend. Затем управление возвращается инструкции While и вновь проверяется условие. Если условие по-прежнему имеет значение True, процесс повторяется. Если оно не имеет значение True, выполнение возобновляется с инструкции, следующей за инструкцией Wend. Циклы While...Wend могут иметь любую глубину вложенности. Каждая инструкция Wend соответствует предшествующей инструкции While. нструкция Do...Loop обеспечивает более структурированный и гибкий способ организации циклов.

Пример В данном примере инструкция While...Wend используется для увеличения переменной-счетчика. Инструкции в цикле выполняются до тех пор, пока указанное условие не True.

Dim Counter

Counter = 0 ' Инициализирует переменную.

While Counter < 20 ' Анализирует значение счетчика.

Counter = Counter + 1 ' Увеличивает счетчик.

Wend ' Завершает цикл While,

' если Counter > 19.

Debug.Print Counter ' Выводит 20 в окно отладки.

End Sub

' Событие "Нажатие кнопки" (Click) для формы UserForm2

Private Sub UserForm_Click()

Unload UserForm2

End Sub

' Событие "Нажатие кнопки" (Click) для формы UserForm1

Private Sub UserForm_Click()

Unload UserForm1

End Sub

Шаг 72 - Инструкция Width #

Задает ширину строки для файла, открытого с помощью инструкции Open.

Width #номерФайла, ширина

Параметры номерФайла : Обязательный. Любой допустимый номер файла. Ширина : Обязательный. Числовое выражение в интервале от 0–255 включительно, которое указывает, сколько символов следует поместить на одной строке прежде, чем перейти к следующей строке. Если ширина равняется 0 (это значение используется по умолчанию), ширина строки не ограничивается. Аргумента ширина по умолчанию имеет значение 0.

Пример Dim I

Open "TESTFILE" For Output As #1 ' Открывает файл для записи.

Width #1, 5 ' Устанавливает ширину равной 5.

For I = 0 To 9 ' Цикл выполняется 10 раз.

Print #1, Chr(48 + I); ' Печатает по 5 символов в строке.

Next I

Close #1 ' Закрывает файл.

Шаг 73 - Инструкция With

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

With объект

[инструкции]

End With

Параметры объект : Обязательный. Имя объекта или определяемого пользователем типа. Инструкции : Необязательный. Одна или несколько инструкций, выполняемых над объектом.

Замечания Инструкция With позволяет выполнить последовательность инструкций над указанным объектом, не повторяя задание имени объекта. Например, если имеется несколько свойств , которые необходимо изменить для одиночного объекта, то удобнее поместить инструкции присвоения свойств внутрь управляющей структуры With, указав ссылку на объект один раз, вместо того, чтобы ссылаться на объект при каждом присвоении его свойств. Следующий пример демонстрирует использование инструкции With для присвоения значений нескольким свойствам одного объекта.

With MyLabel

.Height = 2000

.Width = 2000

.Caption = "Объект MyLabel"

End With

После входа в блок With значение аргумента объект изменить невозможно. В результате, невозможно использование одной инструкции With для воздействия на различные объекты. Допускается создание вложенных конструкций With внутри другого. Однако, поскольку ссылки на объекты внешних блоков With перекрываются во внутренних блоках, необходимо во внутренних блоках With задавать полные ссылки на любой компонент объекта из внешнего блока With. Нельзя выполнять переходы внутрь или из блоков With. Если не выполнены инструкции With или End With, возможно возникновение ошибок или непредсказуемое поведение объектов.

Пример В данном примере инструкция With используется для выполнения набора инструкций над одним объектом. Объект MyObject и его свойства используются исключительно в иллюстративных целях.

With MyObject

.Height = 100

' Эквивалентно MyObject.Height = 100.

.Caption = "Привет"

' Эквивалентно MyObject.Caption = "Привет".

With .Font

.Color = Red

' Эквивалентно MyObject.Font.Color = Red.

.Bold = True

' Эквивалентно MyObject.Font.Bold = True.

End With

End With

Шаг 74 - Инструкция Write #

Записывает неформатированные данные в файл с последовательным доступом.

Write #номерФайла, [списокВывода]

Параметры номерФайла : Обязательный. Любой допустимый номер файла. СписокВывода : Необязательный. Одно или несколько разделяемых запятыми числовых выражений или строковых выражений, которые следует записать в файл.

Замечания Данные, записанные с помощью инструкции Write #, обычно считываются из файла с помощью инструкции Input #. Если аргумент списокВывода опущен, а после аргумента номерФайла идет только разделитель списка, в файл будет напечатана пустая строка. Для разделения выражений можно использовать пробелы, точки с запятой или запятые, которые в данной ситуации полностью эквивалентны. Ниже приведены правила, которые используются при записи данных в файл с помощью инструкции Write #. Записанные данные могут быть корректно прочитаны с помощью инструкции Input # при наличии любой национальной настройки: В качестве десятичного разделителя при записи числовых данных всегда используется точка. При выводе логических данных (тип Boolean) в файл записываются ключевые слова #TRUE# или #FALSE#. Ключевые слова True и False не переводятся. При выводе в файл данных типа Date используется универсальный формат даты. Если компонент, соответствующий дате или времени, отсутствует или равен нулю, в файл записывается только имеющийся в наличии компонент. Если аргумент списокВывода имеет значение Empty, в файл ничего не записывается. Если списокВывода имеет значение Null, в файл записывается #NULL#. Данные типа Error записываются в файл как #ERROR кодОшибки#. Ключевое слово Error не переводится. В отличие от инструкции Print #, инструкция Write # вставляет запятые между элементами и заключает строки в кавычки по мере записи их в файл. Разработчику не требуется включать разделители в список явным образом. Write # вставляет символ новой строки, т.е. комбинацию символов возврата каретки и перевода строки (Chr(13) + Chr(10)), после записи в файл последнего символа, включенного в списокВывода.

Пример В данном примере инструкция Write # используется для записи неформатированных данных в последовательный файл.

Open "TESTFILE" For Output As #1 ' Открывает файл для записи.

Write #1, "Всем привет", 234

' Записывает данные, разделенные запятой.

Write #1, ' Записывает пустую строку.

Dim MyBool, MyDate, MyNull, MyError

' Присваивает значения типа Boolean, Date, Null и Error.

MyBool = False : MyDate = #February 12, 1969# : MyNull = Null

MyError = CVErr(32767)

' Логические данные записываются как #TRUE# или #FALSE#. При выводе дат

' используется универсальный формат даты, например, #1994-07-13#

' соответствует 13 июля 1994 года. Значения Null записываются как

' #NULL#. Данные типа Error записываются как #ERROR код_ошибки#.

Write #1, MyBool ; " - логическое значение"

Write #1, MyDate ; " - дата"

Write #1, MyNull ; " - значение Null"

Write #1, MyError ; " - значение типа Error"

Close #1 ' Закрывает файл.

Шаг 75 - Список операторов

Оператор & Оператор * Оператор + Оператор - Оператор / Оператор \ Оператор ^ Оператор And Операторы сравнения Оператор Eqv Оператор Imp Оператор Is Оператор Like Оператор Mod Оператор Not Оператор Or Оператор Xor

Шаг 76 - Старшинство операторов

Если выражение содержит несколько операторов, то значения компонентов выражения рассчитываются в определенном порядке. Такой порядок называют порядком старшинства или приоритетом операторов.

Если выражение содержит операторы разных типов, то первыми выполняются арифметические операции, следом за ними операции сравнения, а последними логические операции. Все операторы сравнения имеют равный приоритет, т.е. выполняются в порядке их расположения в выражении слева направо. Арифметические и логические операторы выполняются в порядке их расположения в следующей таблице:

Арифметические Сравнения Логические

Возведение в степень (^) Равняется (=) Not

Изменение знака (–) Не равняется (<>) And

Умножение и деление (*, /) Меньше (<) Or

Целое деление (\) Больше (>) Xor

Деление по модулю (Mod) Меньше или равняется (<=) Eqv

Сложение и вычитание (+, –) Больше или равняется (>=) Imp

Слияние строк (&) Like Is

Стоящие рядом в выражении операторы умножения и деления выполняются слева направо. В таком же порядке выполняются стоящие рядом операторы сложения и вычитания. Операторы внутри круглых скобок всегда выполняются раньше, чем операторы вне скобок. Порядок выполнения операторов, стоящих внутри скобок, определяется старшинством операторов.

Оператор конкатенации (слияния строк) (&) не является арифметическим оператором, однако, по порядку старшинства он следует сразу за арифметическими операторами и перед операторами сравнения.

Оператор Like, равный по старшинству остальным операторам сравнения, выделяется в самостоятельный тип оператора сравнения с образцом.

Оператор Is является оператором сравнения ссылок на объект. Этот оператор не выполняет сравнение объектов или их значений; он проверяет только, указывают ли две разные ссылки на один объект.

Шаг 77 - Оператор &

Используется для слияния двух строковых выражений.

результат = выражение1 & выражение2

Параметры результат : Обязательный; любая переменная типа String или Variant. Выражение 1 : Обязательный; любое выражение. выражение2 : Обязательный; любое выражение.

Замечания Если выражение не содержит строковое значение, то оно преобразуется к подтипу String типа Variant. Если оба операнда являются строковыми выражениями, то результат имеет тип данных String; в противном случае результат принадлежит к подтипу String типа Variant. Если оба операнда является выражением со значением Null, результат имеет значение Null. Однако если значение Null имеет только одно выражение, то при слиянии с другим операндом этот операнд рассматривается как пустая строка (""). Любой операнд со значением Empty также рассматривается как пустая строка.

Пример В данном примере демонстрируется использование оператора & для слияния строк.

Dim MyStr

MyStr = "Всем" & " привет" ' Возвращает "Всем привет".

MyStr = "Check " & 123 & " Check" ' Возвращает "Check 123 Check".

Шаг 78 - Оператор *

Возвращает произведение двух чисел.

результат = число1*число2

Параметры результат : Обязательный; любая числовая переменная. Число1 Обязательный; любое числовое выражение. число2 : Обязательный; любое числовое выражение.

Замечания результат обычно имеет тип данных выражения с максимальной точностью. В порядке возрастания точности следуют типы Byte, Integer , Long, Single, Currency, Double и Decimal. Из этого правила имеются такие исключения:

Операция результат

Умножение чисел типа Single и Long, Double.

результат должен получить значение подтипа

Long, Single или Date типа Variant, выходящее

за рамки допустимых для этих типов

диапазонов значений. Преобразуется к подтипу Double типа Variant.

результат должен получить значение подтипа

Byte типа Variant, выходящее за рамки

допустимых для этого типа диапазона значений. Преобразуется к подтипу Integer.

результат должен получить значение подтипа

Integer типа Variant, выходящее за рамки

допустимых для этого типа диапазона значений. Преобразуется к подтипу Long.

Если один или оба операнда является выражением со значением Null, то результат имеет значение Null. Выражение, имеющее значение Empty, рассматривается как имеющее значение 0. Точность результатов операции умножения может отличаться от точности результатов операций сложения и вычитания.

Пример В данном примере демонстрируется использование оператора * для расчета произведения двух чисел.

Dim MyValue

MyValue = 2 * 2 ' Возвращает 4.

MyValue = 459.35 * 334.90 ' Возвращает 153836.315.

Шаг 79 - Оператор +

Возвращает сумму двух чисел.

результат = выражение1+выражение2

Параметры

Результат : Обязательный; любая числовая переменная. выражение1 : Обязательный; любое expression. выражение2 : Обязательный; любое выражение.

Замечания Несмотря на то, что допускается использование оператора + для слияния строковых значений, рекомендуется во избежание возможной путаницы и необходимости дополнительных описаний в программе использовать для слияния строк оператор конкатенации &. Если по крайней мере один из операндов не принадлежит к типу Variant, действуют следующие правила:

Операнды Операция

Оба выражения имеют числовые типы данных (Byte, Boolean,

Integer, Long, Single, Double, Date, Currency или Decimal) Сложение.

Оба выражения имеют тип String Слияние строк.

Одно выражение имеет числовой тип данных, а другое тип

Variant (за исключением значения Null). Сложение.

Одно выражение имеет тип String , а другое тип Variant

(за исключением значения Null). Слияние строк.

Одно выражение имеет тип Variant и содержит значение Empty. результат получает значение

второго операнда.

Одно выражение имеет числовой тип данных, а другое

тип String. Возникает ошибка

несогласования типов.

Оба выражения имеют значения Null результат

имеет значение Null.

Если оба операнда являются выражениями типа Variant, действуют следующие правила:

Операнды Операция

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

Оба выражения типа Variant являются строковыми. Слияние строк.

Одно из выражений типа Variant является числовым, а другое строковым. Сложение

В простых операциях сложения с участием только операндов с числовыми типами результат обычно имеет тип данных слагаемого с максимальной точностью. В порядке возрастания точности следуют типы Byte, Integer, Long, Single, Double, Currency и Decimal. Из этого правила существуют такие исключения:

Операция результат

Сложение чисел типа Single и Long. Double.

результат должен получить значение подтипа Long, Single

или Date типа Variant, выходящее за рамки допустимых для

этих типов диапазонов значений. Преобразуется к подтипу Double.

результат должен получить значение подтипа Byte типа

Variant, выходящее за рамки допустимых для этого типа

диапазона значений. Преобразуется к подтипу Integer.

результат должен получить значение подтипа Integer типа

Variant, выходящее за рамки допустимых для этого типа

диапазона значений. Преобразуется к подтипу Long.

Значение типа Date складывается со значением любого типа. Date

Если один или оба операнда является выражением со значением Null, то результат имеет значение Null. Если оба операнда имеют значение Empty, результат имеет тип Integer. Если значение Empty имеет только один из операндов, результат получает значение второго операнда.

Точность результатов операций сложения и вычитания может отличаться от точности результатов операции умножения.

Пример В данном примере демонстрируется использование оператора + для суммирования чисел. Оператор + позволяет также выполнять слияние строковых значений, однако, во избежание неопределенности рекомендуется выполнять эту операцию только с помощью оператора &. Если один из операндов содержит числовое значение, а второй строковое, то оператор + выполняет операцию сложения. Если оба операнда содержат строковые значения, выполняется слияние строк (конкатенация).

Dim MyNumber, Var1, Var2

MyNumber = 2 + 2 ' Возвращает 4.

MyNumber = 4257.04 + 98112 ' Возвращает 102369.04.

Var1 = "34": Var2 = 6 ' Инициализирует переменные разных типов.

MyNumber = Var1 + Var2 ' Возвращает 40.

Var1 = "34": Var2 = "6" ' Инициализирует строковые переменные.

MyNumber = Var1 + Var2 ' Возвращает "346" (слияние строк)

Шаг 80 - Оператор –

Возвращает разность двух чисел или изменяет знак числового выражения.

результат = число1–число2

число

Параметры результат : Обязательный; любая числовая переменная. Число : Обязательный; любое числовое выражение. число1: Обязательный; любое числовое выражение. число2 : Обязательный; любое числовое выражение.

Замечания В первом варианте синтаксиса оператор – является арифметическим оператором вычитания, возвращающим разность двух чисел. Во втором варианте синтаксиса оператор – используется как унарный оператор, изменяющий знак выражения. результат обычно имеет тип данных выражения с максимальной точностью. В порядке возрастания точности следуют типы Byte, Integer, Long, Single, Double, Currency и Decimal. Из этого правила имеются такие исключения:

Операция результат

Вычитание значений Single и Long. Преобразуется к типу Double.

результат должен получить значение подтипа Long,

Single или Date типа Variant, выходящее за рамки

допустимых для этих типов диапазонов значений. Преобразуется к подтипу Variant,

содержащему значение типа Double.

результат должен получить значение подтипа Byte

типа Variant, выходящее за рамки допустимых для

этого типа диапазона значений. Преобразуется к подтипу Integer.

результат должен получить значение подтипа Integer

типа Variant, выходящее за рамки допустимых для

этого типа диапазона значений. Преобразуется к подтипу Long.

Значение типа Date участвует в операции вычитания

со значением любого типа. Date.

Два значения типа Date участвуют в операции вычитания. Double.

Если один или оба операнда является выражением со значением Null, то результат имеет значение Null. Выражение со значением Empty рассматривается как имеющее значение 0.

Точность результатов операций сложения и вычитания может отличаться от точности результатов операции умножения.

Пример В данном примере демонстрируется использование оператора - для вычисления разности двух чисел.

Dim MyResult

MyResult = 4 - 2 ' Возвращает 2.

MyResult = 459.35 - 334.90 ' Возвращает 124.45.

Шаг 81 - Оператор /

Возвращает результат деления двух чисел.

результат = число1/число2

Параметры результат : Обязательный; любая числовая переменная. число1 : Обязательный; любое числовое выражение. число2 : Обязательный; любое числовое выражение.

Замечания результат обычно имеет тип данных Double или подтип Double типа Variant. Из этого правила имеются такие исключения:

Операция результат

Оба выражения имеют тип Byte, Integer или Single. Тип Single, если при этом результат

не выходит за рамки допустимого

для этого типа диапазона значений;

в последнем случае возникает ошибка.

Оба выражения принадлежат к подтипу Byte,

Integer или Single типа Variant. результат имеет подтип

Single типа Variant, если при этом

он не выходит за рамки

допустимого диапазона значений; в

последнем случае результат получает

значение подтипа Double.

В делении участвует значение типа

Decimal и значение любого другого типа. Decimal.

Если один или оба операнда является выражением со значением Null, то результат имеет значение Null. Выражение, имеющее значение Empty, рассматривается как имеющее значение 0.

Пример В данном примере демонстрируется использование оператора / для деления двух чисел.

Dim MyValue

MyValue = 10 / 4 ' Возвращает 2.5.

MyValue = 10 / 3 ' Возвращает 3.333333.

Шаг 82 - Оператор \

Возвращает результат целого деления двух чисел.

результат = число1\число2

Параметры результат : Обязательный; любая числовая переменная. число1 : Обязательный; любое числовое выражение. число2 : Обязательный; любое числовое выражение.

Замечания Перед выполнением деления значения операндов округляются до целых значений типа Byte, Integer или Long. Обычно, результат имеет тип данных Byte, подтип Byte типа Variant, тип Integer, подтип Integer типа Variant, тип Long или подтип Long типа Variant, вне зависимости от того, является ли результат целым числом. Любая дробная часть отбрасывается. Если один или оба операнда является выражением со значением Null, результат имеет значение Null. Выражение, имеющее значение Empty, рассматривается как имеющее значение 0.

Пример В данном примере демонстрируется использование оператора \ для целого деления двух чисел.

Dim MyValue

MyValue = 11 \ 4 ' Возвращает 2.

MyValue = 9 \ 3 ' Возвращает 3.

MyValue = 100 \ 3 ' Возвращает 33.

Шаг 83 - Оператор ^

Возводит число в степень.

результат = число^показатель

Параметры результат : Обязательный; любая числовая переменная. Число : Обязательный; любое числовое выражение. Показатель : Обязательный; любое числовое выражение.

Замечания Отрицательные значения операнда число допускаются только для целых значений операнда показатель. Стоящие рядом в выражении несколько операторов возведения в степень ^ выполняются слева направо. Обычно, результат имеет тип данных Double или Variant, содержащий значение типа Double. Если любой из операндов число или показатель представлен выражением, имеющим значение Null, то результат также имеет значение Null.

Пример В данном примере демонстрируется использование оператора ^ для возведения числа в степень.

Dim MyValue

MyValue = 2 ^ 2 ' Возвращает 4.

MyValue = 3 ^ 3 ^ 3 ' Возвращает 19683.

MyValue = (-5) ^ 3 ' Возвращает -125.

Шаг 84 - Оператор And

Возвращает результат конъюнкции (логического И) для двух выражений.

результат = выражение1 And выражение2

Параметры результат : Обязательный; любая числовая переменная. выражение1 : Обязательный; любое выражение. выражение2 : Обязательный; любое выражение.

Замечания Если оба выражения имеют значение True, результат имеет значение True. Если хотя бы одно из выражений имеет значение False, результат имеет значение False. Возвращаемые оператором значения представлены в следующей таблице:

выражение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

Оператор And выполняет также поразрядное сравнение двух числовых выражений и присваивает соответствующему разряду в переменной результат следующее значение:

Разряд в выражение1 Разряд в выражение2 результат

0 0 0

0 1 0

1 0 0

1 1 1

Пример В данном примере демонстрируется использование оператора And для выполнения операции конъюнкции (логического умножения) двух выражений.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null ' Инициализирует переменные.

MyCheck = A > B And B > C ' Возвращает True.

MyCheck = B > A And B > C ' Возвращает False.

MyCheck = A > B And B > D ' Возвращает Null.

MyCheck = A And B ' Возвращает 8 (поразрядное сравнение).

Шаг 85 - Операторы сравнения

Используются для сравнения двух выражений.

результат = выражение1 операторСравнения выражение2

результат = объект1 Is объект2

результат = строка Like образец

Параметры результат : Обязательный; любая числовая переменная. Выражение : Обязательный; любое выражение. ОператорСравнения : Обязательный; любой оператор сравнения. Объект : Обязательный; любое имя объекта. Строка : Обязательный; любое строковое выражение. Образец : Обязательный; любое строковое выражение или диапазон символов.

Замечания Ниже приведен список операторов сравнения и условия, при которых результат имеет значение True, False или Null:

Оператор True False Null

< выражение1 < выражение2 выражение1 <= выражение2 выражение1 или выражение2 = Null

<= выражение1 <= выражение2 выражение1 < выражение2 выражение1 или выражение2 = Null

> выражение1 > выражение2 выражение1 >= выражение2 выражение1 или выражение2 = Null

>= выражение1 >= выражение2 выражение1 > выражение2 выражение1 или выражение2 = Null

= выражение1 = выражение2 выражение1 <> выражение2 выражение1 или выражение2 = Null

<> выражение1 <> выражение2 выражение1 = выражение2 выражение1 или выражение2 = Null

Операторы Is и Like функционально отличаются от операторов сравнения, перечисленных в таблице. При сравнении двух выражений иногда затруднительно определить, будут ли сравниваться выражения как числовые или как строковые. В следующей таблице показано, как сравниваются выражения, если хотя бы одно из них не принадлежит к типу Variant:

Операнды Операция

Оба выражения имеют числовые типы данных (Byte, Boolean, Integer,

Long, Single, Double, Date, Currency или Decimal). Сравнение чисел.

Оба выражения имеют тип String. Сравнение строк.

Одно выражение имеет числовой тип, а другое тип Variant,

содержащий число или допускающий преобразование к числовому типу. Сравнение чисел.

Одно выражение имеет числовой тип, а другое тип Variant,

содержащий строку, не допускающую преобразование к числовому типу. Ошибка несогласования

типов.

Одно выражение имеет тип String, а другое тип Variant (не Null). Сравнение строк.

Одно выражение имеет значение Empty, а другое числовой тип данных. Сравнение чисел, где

значение Empty

рассматривается как 0

Одно выражение имеет значение Empty, а другое тип String. Сравнение строк, где

значение Empty рассматривается как пустая строка ("").

Если оба операнда, выражение1 и выражение2, принадлежат к типу Variant, то способ сравнения определяется подтипами, к которым они принадлежат. В следующей таблице показано, как осуществляется сравнение в зависимости от подтипов типа Variant:

Операнды Операция

Оба выражения типа Variant имеют числовые значения. Сравнение чисел.

Оба выражения типа Variant имеют строковые значения. Сравнение строк.

Одно из выражений типа Variant является числовым,

а другое строковым. Числовое выражение считается меньшим,

чем строковое.

Одно из выражений типа Variant имеет значение Empty,

а другое числовое значение. Сравнение чисел, где значение Empty

рассматривается как 0.

Одно из выражений типа Variant имеет значение Empty,

а другое строковое значение. Сравнение строк, где значение Empty

рассматривается как пустая строка ("").

Оба выражения типа Variant имеют значение Empty. Выражения считаются равными.

При сравнении значения типа Single со значением типа Double, значение типа Double округляется до точности типа Single. Если значение типа Currency сравнивается со значением типа Single или Double, то значение типа Single или Double преобразуется к типу Currency. Аналогично, при сравнении значения типа Decimal со значением типа Single или Double, значение типа Single или Double преобразуется к типу Decimal. Для типа Currency любая дробная часть со значением, меньшим 0,0001 может оказаться потерянной. Для типа Decimal могут быть потеряны дробные части, меньшие 1E-28, или возникнуть ошибка переполнения. Потеря дробных частей может привести к тому, что числа, не являющиеся целыми, будут сравниваться как целые.

Пример. В данном примере демонстрируется использование операторов сравнения для сравнения выражений.

Dim MyResult, Var1, Var2

MyResult = (45 < 35) ' Возвращает False.

MyResult = (45 = 45) ' Возвращает True.

MyResult = (4 <> 3) ' Возвращает True.

MyResult = ("5" > "4") ' Возвращает True.

Var1 = "5": Var2 = 4 ' Инициализирует переменные.

MyResult = (Var1 > Var2) ' Возвращает True.

Var1 = 5: Var2 = Empty

MyResult = (Var1 > Var2) ' Возвращает True.

Var1 = 0: Var2 = Empty

MyResult = (Var1 = Var2) ' Возвращает True.

Шаг 86 - Оператор Eqv

Используется для проверки логической эквивалентности двух выражений.

результат = выражение1 Eqv выражение2

Параметры результат : Обязательный; любая числовая переменная. выражение1 : Обязательный; любое выражение. выражение2 : Обязательный; любое выражение.

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

выражение1 выражение2 результат

True True True

True False False

False True False

False False True

Оператор Eqv выполняет также поразрядное сравнение двух числовых выражений и присваивает соответствующему разряду в переменной результат следующее значение:

Разряд в выражение1 Разряд в выражение2 результат

0 0 1

0 1 0

1 0 0

1 1 1

Пример

В данном примере демонстрируется использование оператора Eqv для выполнения операции логической эквивалентности двух выражений.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null ' Инициализирует переменные.

MyCheck = A > B Eqv B > C ' Возвращает True.

MyCheck = B > A Eqv B > C ' Возвращает False.

MyCheck = A > B Eqv B > D ' Возвращает Null.

MyCheck = A Eqv B ' Возвращает -3 (поразрядное сравнение).

Шаг 87 - Оператор Imp

Выполняет операцию логической импликации для двух выражений.

результат = выражение1 Imp выражение2

Параметры результат : Обязательный; любая числовая переменная. выражение1 : Обязательный; любое выражение. выражение2 : Обязательный; любое выражение.

Замечания Возвращаемые оператором значения представлены в следующей таблице:

выражение1 выражение2 результат

True True True

True False False

True Null Null

False True True

False False True

False Null True

Null True True

Null False Null

Null Null Null

Оператор Imp выполняет также поразрядное сравнение двух числовых выражений и присваивает соответствующему разряду в переменной результат следующее значение:

Разряд в выражение1 Разряд в выражение2 результат

0 0 1

0 1 1

1 0 0

1 1 1

Пример В данном примере демонстрируется использование оператора Imp для выполнения операции логической импликации двух выражений.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null ' Инициализирует переменные

MyCheck = A > B Imp B > C ' Возвращает True.

MyCheck = A > B Imp C > B ' Возвращает False.

MyCheck = B > A Imp C > B ' Возвращает True.

MyCheck = B > A Imp C > D ' Возвращает True.

MyCheck = C > D Imp B > A ' Возвращает Null.

MyCheck = B Imp A ' Возвращает -1 (поразрядное сравнение).

Шаг 88 - Оператор Is

Используется для сравнения двух переменных, содержащих ссылки на объекты.

результат = объект1 Is объект2

Параметры результат : Обязательный; любая числовая переменная. объект1 : Обязательный; любое имя объекта. объект2 : Обязательный; любое имя объекта.

Замечания Если переменные объект1 и объект2 содержат ссылки на один объект, результат имеет значение True; в противном случае результат имеет значение False. Ссылки на один объект в двух переменных задаются различными способами. В следующей инструкции в переменной A задается ссылка на тот же объект, что и в переменной B:

Set A = B

Следующая инструкция задает в переменных A и B ссылку на тот же объект, что и в переменной C:

Set A = C

Set B = C

Пример В данном примере демонстрируется использование оператора Is для сравнения ссылок на объекты. Имена объектных переменных являются произвольными и используются только для демонстрации.

Dim MyObject, YourObject, ThisObject, OtherObject, ThatObject, MyCheck

Set YourObject = MyObject ' Определяет ссылки на объекты.

Set ThisObject = MyObject

Set ThatObject = OtherObject

MyCheck = YourObject Is ThisObject ' Возвращает True.

MyCheck = ThatObject Is ThisObject ' Возвращает False.

' Пусть MyObject <> OtherObject

MyCheck = MyObject Is ThatObject ' Возвращает False.

Шаг 89 - Оператор Like

Используется для сравнения двух строковых выражений.

результат = строка Like образец

Параметры результат : Обязательный; любая числовая переменная. Строка : Обязательный; любое строковое выражение. Образец : Обязательный; любое строковое выражение, удовлетворяющее описанным ниже соглашениям о сравнениях строк с образцом.

Замечания Если значение переменной строка соответствует значению переменной образец, результат имеет значение True; при их несоответствии результат имеет значение False. Если любой из операндов, строка или образец, имеет значение Null, результат также имеет значение Null. Характеристики оператора Like определяются настройкой, задаваемой в инструкции Option Compare. Если не указано другое, то стандартный способ сравнения строк в каждом модуле задается инструкцией Option Compare Binary. Инструкция Option Compare Binary указывает способ сравнения строковых значений, основанный на порядке сортировки, который определяется внутренним двоичным представлением символов. В Microsoft Windows порядок сортировки определяется кодовой страницей. Ниже демонстрируется типичный пример упорядочивания символов:

A < B < E < Z < a < b < e < z < А < К < Ш < а < к < ш

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

(A=a) < (B=b) < (E=e) < (Z=z) < (А=а) < (К=к) < (Ш=ш)

Существуют встроенные средства сравнения строковых значений, допускающие использование в образце подстановочных знаков, списков символов и диапазонов символов. В следующей таблице перечислены специальные символы, используемые в переменной образец, и соответствующие им символы в переменной строка:

Специальные символы Совпадающие символы

? Любой одиночный символ.

* Любое количество символов или отсутствие символа.

# Любая одиночная цифра (0–9).

[список] Любой одиночный символ, входящий в список.

[!список] Любой одиночный символ, не входящий в список.

Любой одиночный символ в переменной строка может быть сравнен с группой из одного или нескольких символов (список), заключенных в квадратные скобки ([ ]). Такая группа может содержать символы практически с любыми кодами, включая цифры. Специальные символы левая квадратная скобка ([), вопросительный знак (?), символ (#) и звездочка (*) сравниваются как обычные символы, только если они заключены в квадратные скобки. Правая квадратная скобка (]) в группе всегда рассматривается как специальный символ, но может сравниваться как обычный символ вне группы. В дополнение к простому списку символов в квадратных скобках, допускается указание в образце диапазона символов с помощью дефиса (–), отделяющего нижнюю и верхнюю границы диапазона. Например, [A-Z] указывает, что совпадающими будут считаться все символы верхнего регистра латинского алфавита, находящиеся в нужной позиции в переменной строка. Допускается указание внутри прямых скобок нескольких диапазонов без символов разделителей. Конкретный вид указанного диапазона определяется действующим во время выполнения способом упорядочивания символов (который задается инструкцией Option Compare и национальной настройкой системы). Если использовать приведенный выше пример в режиме Option Compare Binary, то диапазону [A–E] соответствуют символы A, B и E. В режиме Option Compare Text, образцу [A–E] соответствуют символы A, a, А, а, B, b, E, e. Отметим, что в это диапазон не попадают символы К или к, поскольку все символы русского алфавита размещаются в порядке сортировки после стандартных символов латинского алфавита. Существуют также следующие правила, действующие при сравнении с образцом: Восклицательный знак (!) в начале перечня список указывает, что совпадающим с образцом считается любой символ в соответствующей позиции в операнде строка, за исключением входящих в список. Вне квадратных скобок восклицательный знак рассматривается как обычный символ. Дефис (–) в начале списка или сразу после восклицательного знака, а также в конце списка рассматривается как обычный символ. В любой другой позиции внутри квадратных скобок он рассматривается как определение диапазона. Определять диапазон необходимо в порядке возрастания. [A-Z] является допустимым определением диапазона, а [Z-A] недопустимым. Пустая пара квадратных скобок [] игнорируется; она рассматривается как пустая строка (""). В некоторых языках имеются специальные символы алфавита, представляющие пару букв. Например, символ "ж" представляет стоящие рядом буквы "a" и "e". Оператор Like распознает такой символ и соответствующую пару букв как эквивалентные. Если в системных национальной настройке указан язык, в котором используются специальные символы, то включение такого символа и в переменную образец, и в переменную строка приводит к тому, что эквивалентная пара в букв в другом операнде рассматривается как совпадающая с этим символом. Аналогично, при включении специального символа в образец внутри квадратных скобок (одного символа или как часть определения списка или диапазона) он представляет эквивалентную пару букв в операнде строка.

Пример В данном примере демонстрируется использование оператора Like для сравнения строкового значения с образцом.

Dim MyCheck

MyCheck = "aBBBa" Like "a*a" ' Возвращает True.

MyCheck = "F" Like "[A-Z]" ' Возвращает True.

MyCheck = "F" Like "[!A-Z]" ' Возвращает False.

MyCheck = "a2a" Like "a#a" ' Возвращает True.

MyCheck = "aM5b" Like "a[L-P]#[!c-e]" ' Возвращает True.

MyCheck = "BAT123khg" Like "B?T*" ' Возвращает True.

MyCheck = "CAT123khg" Like "B?T*" ' Возвращает False.

Шаг 90 - Оператор Mod

Возвращает остаток при целом делении двух чисел (значение по модулю).

результат = число1 Mod число2

Параметры результат : Обязательный; любая числовая переменная. число1 : Обязательный; любое числовое выражение. число2 : Обязательный; любое числовое выражение.

Замечания Выполняется деление по модулю (нахождение остатка) число1 на число2 (с округлением действительных чисел до целых). результат получает значение остатка. Например, в следующем выражении A (результат) равняется 5.

A = 19 Mod 6.7

Обычно, результат имеет тип данных Byte, подтип Byte типа Variant, тип Integer, подтип Integer типа Variant, тип Long или подтип Long типа Variant, вне зависимости от того, является ли результат целым числом. Любая дробная часть отбрасывается. Если один или оба операнда является выражением со значением Null, результат имеет значение Null. Выражение, имеющее значение Empty, рассматривается как имеющее значение 0.

Пример В данном примере оператор Mod выполняет деление двух чисел и возвращает остаток. Если любой из операндов является действительным числом, он предварительно округляется до целого.

Dim MyResult

MyResult = 10 Mod 5 ' Возвращает 0.

MyResult = 10 Mod 3 ' Возвращает 1.

MyResult = 12 Mod 4.3 ' Возвращает 0.

MyResult = 12.6 Mod 5 ' Возвращает 3.

Шаг 91 - Оператор Not

Выполняет над выражением операцию логического отрицания.

результат = Not выражение

Параметры результат : Обязательный; любая числовая переменная. Выражение : Обязательный; любое выражение.

Замечания Возвращаемые оператором значения представлены в следующей таблице:

выражение результат

True False

False True

Null Null

Оператор Not выполняет также поразрядное изменение значений каждого разряда переменной и присваивает соответствующему разряду в переменной результат следующее значение:

Разряд в выражение результат

0 1

1 0

Пример В данном примере демонстрируется использование оператора Not для выполнения операции логического отрицания для одного выражения.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null ' Инициализирует переменные.

MyCheck = Not(A > B) ' Возвращает False.

MyCheck = Not(B > A) ' Возвращает True.

MyCheck = Not(C > D) ' Возвращает Null.

MyCheck = Not A ' Возвращает -11 (поразрядное сравнение).

Шаг 92 - Оператор Or

Выполняет операцию логического ИЛИ (сложения) для двух выражений.

результат = выражение1 Or выражение2

Параметры результат : Обязательный; любая числовая переменная. выражение1 : Обязательный; любое выражение. выражение2 : Обязательный; любое выражение.

Замечания Если одно или оба выражения истинны (имеют значение True), результат также имеет значение True. Возвращаемые оператором значения представлены в следующей таблице:

выражение1 выражение2 результат

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

Оператор Or выполняет также поразрядное сравнение двух числовых выражений и присваивает соответствующему разряду в переменной результат следующее значение:

Разряд в выражение1 Разряд в выражение2 результат

0 0 0

0 1 1

1 0 1

1 1 1

Пример В данном примере демонстрируется использование оператора Or для выполнения операции дизъюнкции (логического сложения) двух выражений.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null ' Инициализирует переменные.

MyCheck = A > B Or B > C ' Возвращает True.

MyCheck = B > A Or B > C ' Возвращает True.

MyCheck = A > B Or B > D ' Возвращает True.

MyCheck = B > D Or B > A ' Возвращает Null.

MyCheck = A Or B ' Возвращает 10 (поразрядное сравнение).

Шаг 93 - Оператор Xor

Выполняет операцию исключающего ИЛИ для двух выражений.

[результат =] выражение1 Xor выражение2

Параметры результат : Обязательный; любая числовая переменная. выражение1 : Обязательный; любое выражение. выражение2 : Обязательный; любое выражение.

Замечания Если одно и только одно из выражений истинно (имеет значение True), результат имеет значение True. Если хотя бы одно из выражений имеет значение Null, результат также имеет значение Null, Если ни одно из выражений не имеет значение Null, результат определяется следующим образом:

выражение1 выражение2 результат

True True False

True False True

False True True

False False False

Оператор Xor выполняет также поразрядное сравнение двух выражений и присваивает соответствующему разряду в переменной результат следующее значение:

Разряд в выражение1 Разряд в выражение2 результат

0 0 0

0 1 1

1 0 1

1 1 0

Пример В данном примере демонстрируется использование оператора Xor для выполнения операции исключающего ИЛИ для двух выражений.

Dim A, B, C, D, MyCheck

A = 10: B = 8: C = 6: D = Null ' Инициализирует переменные.

MyCheck = A > B Xor B > C ' Возвращает False.

MyCheck = B > A Xor B > C ' Возвращает True.

MyCheck = B > A Xor C > B ' Возвращает False.

MyCheck = B > D Xor A > B ' Возвращает Null.

MyCheck = A Xor B ' Возвращает 2 (поразрядное сравнение).