Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_№13_VBA.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
918.58 Кб
Скачать
    1. Управление выполнением программы

VBA предоставляет целый ряд способов управления ходом выполнения инструкций в процедурах. Инструкция call используется для передачи управления процедуре Sub, то есть для ее вызова.

Синтаксис:

Call имя подпрограммы [(<аргументы>)]

или

имя подпрограммы [<аргументы>]

где

<аргументы> — это {[ByVal | ByRef] <выражение>),...

Пример:

Sub Test(A As Integer)

A = 5

MsgBox A

End Sub

Sub CallFoo()

Dim A As Integer

A = 10

Call Test(A)

MsgBox A

End Sub

    1. Примеры управления выполнением программы

Инструкция Do...Loop используется для описания блока инструкций, который должен выполняться многократно. Также можно указать условие, определяющее окончание работы цикла.

Синтаксис:

Do [{While | Until} <условие>]

[<инструкции тела цикла>]

[Exit Do]

[<инструкции тела цикла>]

Loop

или

Do

[<инструкции тела цикла>]

[Exit Do]

[<инструкции тела цикла>]

Loop [{While | Until} <условие>]

Пример: В процедуре FirstProc условие проверяется до входа в цикл. Если myNum задать равным 9 вместо 20, инструкции внутри цикла выполняться не будут.

Sub FirstProc()

counter = 0

myNum = 20

Do While myNum > 10

myNum = myNum –1

counter = counter + 1

Loop

MsgBox "Выполнено " & counter & " итераций цикла."

End Sub

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

Sub NextProc()

counter = 0

myNum = 9

Do

myNum = myNum –1

counter = counter + 1

Loop While myNum > 10

MsgBox "В цикле выполнено " & counter & " итераций."

End Sub

Инструкция For...Next позволяет выполнить последовательность инструкций определенное число раз.

Синтаксис:

For счетчик = начальное значение

То конечное значение [Step шаг]

[<инструкции тела цикла>]

[Exit For]

[ <инструкции тела цикла> ]

Next [счетчик]

Пример:

Sub Primer()

Dim Users(3) As String

Dim I As Integer

For I = 1 To 3

Users(I) = InputBox("Имя пользователя", "Введите имя пользователя")

Next I

End Sub

Инструкция For Each...Next позволяет выполнить блок инструкций процедуры для каждого элемента массива или семейства.

Синтаксис:

For Each элемент In группа

[<инструкции тела цикла>]

[Exit For]

[ <инструкции тела цикла> ]

Next [элемент]

Пример:

Sub ShowUsers()

Dim Users(2) As String

Users(0) = "Иван"

Users(1) = "Петя"

Users(2) = "Вася"

Dim User As Variant

For Each User In Users

MsgBox User

Next User

End Sub

Инструкция GoTo используется для безусловного перехода к другой инструкции в процедуре.

Cинтаксис:

GoTo {метка | номер строки}

Пример: Преход к строке с меткой SkipOver.

GoTo SkipOver

Инструкция If...Then...Else используется для выполнения той или иной группы инструкций в зависимости от значений условных выражений. Синтаксис:

If <условие 1> Then

[<инструкции процедуры 1>]

[Elself <условие-2> Then

[<инструкции процедуры 2>]] ...

[Else]

[<инструкции процедуры n>] ]

End If

Или

If <условие> Then <инструкция то>

[Else <инструкция иначе>]

Пример:

Sub Enter_user( )

Dim UserName As String

UserName = InputBox("Введите имя пользователя:",_

"Имя пользователя",UserName )

If (UserName = "Admin") Then

MsgBox "Добро пожаловать!!!"

Else

If (UserName = "User") Then

MsgBox "Добро пожаловать!"

Else

MsgBox "Извините, но вы не можете войти в систему!"

End If

End If

End Sub

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

Синтаксис:

Select Case <проверяемое выражение>

[Case <список сравнения 1>

[<инструкции процедуры 1>]]

[Case Else

[<инструкции процедуры n>]]

End Select

где

<проверяемое выражение> — это некоторое числовое или строковое выражение, а <список сравнения> есть {<элемент сравнения>,. . . }

<элемент сравнения> — это {выражение | выражение1 То выражение2 |

Is <оператор сравнения> выражение}

<оператор сравнения> есть {= | о | < | > | <= | >=}

Пример: Присвоение целочисленного значения переменной в зависимости от того, начинается ли строка символов с буквы в интервале от А до F, от G до N либо от О до Z.

Function Bonus(performance, salary)

Select Case performance

Case 1

Bonus = salary * 0.1

Case 2, 3

Bonus = salary * 0.09

Case 4 To 6

Bonus = salary * 0.07

Case Is > 8

Bonus = 100

Case Else

Bonus = 0

End Select

End Function

Инструкция Stop – приостановление выполнения процедуры. Действие инструкции Stop аналогично установке в программе точки останова на некоторой инструкции.

Синтаксис:

Stop

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

While <условие>

[<инструкции тела цикла>]

Wend

Пример: ввод имен пользователей, выполняемый до тех пор, пока не выбрана кнопка Cancel (Отмена) либо не введено имя нулевой длины.

Sub WhileWendDemo()

Dim User As String

User = InputBox("Добавьте имя пользователя",

"Добавление пользователей", User)

While (Len(User) > 0)

MsgBox "" & User, vblnformation

User = InputBox("Добавьте имя пользователя ",

" Добавьте имя пользователей", User)

Wend

End Sub

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

With <объект>

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

End With

Пример: Добавление новой строки в таблицу, используя краткую запись ссылок, в которых участвует объект типа Recordset.

Dim rst As qdf Recordset, db As Database

Set db = CurrentDb()

Set rst = db.OpenRecordset("MyTable", db.OpenDynaset, dbAppendOnly)

With rst

' Создание новой записи

.Addnew

' Установка значений полей

![Field1] = "1"

![Field2] = "John"

.Update

.Close

End With

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]