
- •Модули (vba) в субд Access
- •Когда следует использовать макросы
- •Согда следует использовать vba
- •Среда Visual Basic для приложений
- •Общие модули
- •Модули форм и отчетов
- •Окно модуля
- •Окно отладки
- •Переменные и константы
- •Типы данных
- •Область определения переменных и констант
- •Инструкция Const
- •Инструкция Dim
- •Инструкция Public
- •Инструкция Type
- •Методы объектов
- •Функции и подпрограммы
- •Инструкция Function
- •Инструкция Sub
- •Управление выполнением программы
- •Инструкция Call
- •Инструкция Do... Loop
- •Инструкция For... Next
- •Инструкция For Each... Next
- •Инструкция GoTo
- •Инструкция If...Then... Else
- •Инструкция Select Case
- •Инструкция Stop
- •Инструкция While...Wend
- •Инструкция With
- •Запуск макрокоманд
- •Объект DoCmd
- •Макрокоманды и их эквиваленты в vba
- •Обработка ошибок
- •Инструкция On Error
Управление выполнением программы
VBA предоставляет целый ряд способов управления ходом выполнения инструкций в процедурах. Вы можете вызывать другие процедуры, организовывать циклическое выполнение блока инструкций заданное число раз или до тех пор, пока некоторое условие остается истинным. Вы можете также передать управление конкретной инструкции процедуры или в любой момент времени выйти из нее. В следующих разделах рассматриваются некоторые (но не все) возможности управления ходом выполнения инструкций в процедурах VBA.
Инструкция Call
Инструкция Call используется для передачи управления процедуре Sub.
Синтаксис:
Call имя-подпрограммы [(<аргументы>)] или
имя-подпрограммы [<аргументы>] где <аргументы> — это
{ [ByVal | ByRef] <выражение>}, . . .
Пояснения:
Имена переменных, передаваемых подпрограмме вызывающей процедурой, могут отличаться от имен формальных аргументов. Ключевые слова ByVal и ByRef применяютя в инструкции Call только в определенных обстоятельствах, например при вызове процедуры из библиотеки динамической компоновки (DLL). Если при описании аргумента используется ключевое слово ByVal, то VBA передает подпрограмме копию аргумента, и подпрограмма не может изменить значение исходной переменной в вызывающей процедуре. Выражение всегда передается по значению независимо от того, как описан соответствующий формальный аргумент подпрограммы. При использовании ключевого слова ByRef VBA передает адрес переменной, позволяя процедуре изменять фактическое значение переменной.
Примеры:
Чтобы вызвать подпрограмму с именем MySub и передать ей целую переменную и выражение, введите:
Call MySub (intMyInteger, curPrice * intQty) Другой синтаксически правильный способ вызова —
MySub intMyInteger, curPrice * intQty
Инструкция Do... Loop
Инструкция Do... Loop используется для определения блока инструкций, выполнение которого будет повторяться до тех пор, пока заданное условие является истинным.
Синтаксис:
Do [{While Until} <условие>]
[<инструкции-тела-цикла>]
[Exit Do]
[<инструкции-тела-цикла>] Loop или
Do
[<инструкции-тела-цикла>] [Exit Do]
[<инструкции-тела-цикла>] Loop [{While I Until} <условие>]
Пояснения:
<условие> может быть любым выражением, которое Microsoft Access может оценить как True (ненулевое значение) либо False (ноль или Null). Предложение While (Пока) действует противоположным образом по сравнению с предложением Until (До). При использовании предложения While выполнение блока инструкций цикла продолжается до тех пор, пока условие имеет значение True. Если задано предложение Until, выполнение блока инструкций прекращается, как только условие принимает значение True. Когда предложение While или Until находится в начале инструкции Do... Loop (то есть в предложении Do), то условие проверяется до выполнения тела цикла, но если вы поместите предложение While или Until в конце инструкции Do...Loop (в предложении Loop), то VBA выполняет инструкции тела цикла до проверки условия.
Для выхода из цикла прежде, чем будет достигнуто предложение Loop, можно поместить одну или несколько инструкций Exit Do внутри тела цикла. Обычно инструкция Exit Do используется внутри других управляющих структур, таких как If...T hen... Else.
Пример:
Чтобы прочитать все строки таблицы tbICIubs, пока не будет достигнут конец набора записей, введите:
Dim dbEntSched As Database
Dim rcdClubs As RecordSet
Set dbEntSched = CurrentDbO
Set rcdClubs = dbEntSched.OpenRecordSet("tbICIubs")
Do Until rcdClubs.EOF
<инструкции-тела-цикла>
rcdClubs.MoveNext Loop