
- •Теоретические сведения
- •Пункты меню редактора vba
- •Среда Microsoft Visual Basic Access
- •Создание модуля vba
- •Язык Visual Basic for Applications (vba).
- •Переменные и оператор присваивания
- •Правила присвоения имен в языке Visual Basic
- •Создание нового модуля
- •Соглашения по синтаксису
- •Инструкции
- •Управляющие конструкции
- •Процедуры и функции
- •Управление выполнением программы
- •Примеры управления выполнением программы
- •Обработка ошибок
- •Математические операторы
- •Контрольные Вопросы:
- •Задания:
- •Контрольные Вопросы:
- •Как объявить переменную в vba?
- •Какие основные типы данных используются в vba?
- •Чем процедура отличается от функции?
- •Как объявить процедуру и как функцию?
- •Как происходит вызов процедуры или функции?
Управление выполнением программы
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
Примеры управления выполнением программы
Инструкция 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