Пример 19.22
If MaxPrice > 23,000.00$ Then MaxPrice=23,500.00$
If Student_Card(100).FullName Like "Пе*" Then number=Student_Card(100).Group
При построении выражений используют специальные функции логических проверок VBA.
Логические выражения могут быть построены с помощью стандартных логических функций:
Функция | Описание | Функция | Описание |
Not And Or | Инверсия или отрицание Логическое "И" Логическое "ИЛИ" | Хоr Imp Eqv | Исключающее "Или" Импликация Эквивалентность |
Последовательно выполняется проверка истинности выражений. Если выражение 1 истинно, выполняется блок операторов 1, иначе выполняется проверка истинности выражения 2и т.д.
Если ни одно из выражений не соответствует требованиям истинности, выполняется блок операторов Else,если оно имеется, иначе – оператор, следующий за End If.
Пример 19.23.Организация проверки условия блочной структурой оператора If
Текст программы | Комментарий |
If AvgPrice > 12000 Then DiffPrice=Full(234, 45600) | Проверка условия 1 Если условие 1 истинно, вызов процедуры |
ElseIf AvgPrice > 24000 Then DiffPrice=Full( 12000, 45000) ElseIf AvgPrice > 36000 Then DiffPrice=Full(24000, 50000) Else DiffPrice=Full(36000, 70000) End If | Проверка условия 2 Если условие 2 истинно, вызов процедуры Проверка условия 3 Если условие 3 истинно, вызов процедуры Если условия 1 – 3 не выполняются, вызов процедуры Конец блока If |
Оператор выборки Select Case.Данный оператор применяется в том случае, если во всех логических условиях участвует одна и та же величина (переменная):
Выражение для сравнения может быть записано в виде: Case 45 или Case 3, 4, 5, или Case 5 То 12.
Если ни одно из сравнений не является истинным, выполняется блок операторов Else,если блок Elseотсутствует, управление передается оператору, следующему за End Case.
Пример 19.24.Организация последовательной проверки значения переменной
Текст программы | Комментарий |
Select CDemse | Начало работы оператора Select, объявление имени переменной, для которой выполняются последующие проверки – Demse |
CaseDemse21 | Первое сравнение |
Dem=21 | Если первое сравнение истинно, выполняется оператор присваивания |
Case Demse 22; 25; 28 | Второе сравнение – указан список возможных значений |
Dem=31 | Если второе сравнение истинно, выполняется оператор присваивания |
Case Demse 45 To 48 | Третье сравнение, переменная Cdemse может принимать значения от 45 до 48 |
Dem=41 | Если третье сравнение истинно, выполняется оператор присваивания |
Case Else | Если не выполнилось ни одно из указанных сравнений |
Dem=51 | Выполняется присваивание |
End Case | Конец оператора Select |
Оператор цикла For-Next.Данный оператор относится к категории вычисляемых циклов, когда известно заранее число повторений цикла, заданы начальное, конечное значения и шаг (приращение) изменения начального значения, т.е.:
Для каждого значения переменной этого цикла выполняется блок операторов, расположенных до ключевого слова Next.Затем происходит изменение переменной цикла (увеличение значения на шаг), проверяется полученное значение (не более указанного конечного значения) и повторяется выполнение блока операторов.
Если переменная цикла превысила значение конец, управление передается оператору, следующему за фразой Next.
В теле цикла может присутствовать оператор Exit For.При выполнении этого оператора прекращается цикл и управление также передается оператору, следующему за фразой Next. Цикл For-Nextможет быть вложенным.
Пример 19.25.Организация циклов с использованием счетчика повторений
Текст программы | Комментарий |
Sub stickRandom() Dim numrows As Integer; numcols As Integer Dim therow As Integer; thecol As Integer numrows = Selection.Rows.Count numcols = Selection.Columns.Count Debug. Print numrows; numcols Randomize Debug.Print Rnd For therow = 1 To numrows For thecol = 1 To numcols Selection. Cells(therow; thecol).Value = Rnd Next thecol Next therow End Sub | Объявление имени процедуры Объявление переменных Определение числа строк в выделенном блоке ячеек Определение числа столбцов в выделенном блоке ячеек Печать числа строк и столбцов в выделенном блоке ячеек Генератор случайных чисел Печать случайного числа Внешний цикл по числу строк в блоке ячеек Внутренний цикл по числу столбцов в блоке ячеек Присваивание текущей ячейке случайного числа Selection – выбор ячейки Cells – метод доступа к ячейке с определенными координатами Value – свойство "значение" Конец внутренного цикла Конец внешнего цикла Конец процедуры |
Цикл Do-Loop.Логически управляемый цикл, оператор Do – начало, оператор Loop– конец цикла; имеет 4 модификации:
1) условие True в начале цикла
Do While <условие>
<блок операторов>
Exit Do
<блок операторов>
Loop
Цикл выполняется до тех пор, пока истинно <условие>. Минимальное число повторений тела цикла – 0. Оператор Exit Doпредназначен для прекращения цикла и передачи управления оператору Loop– конец цикла.
2) условие True в конце цикла
Do
<блок операторов>
Exit Do
<блок операторов>
Loop While <условие>
Цикл выполняется хотя бы один раз, в конце выполняется проверка <условия>.
3) условие False в начале цикла
Do Until <условие>
<блок операторов>
Exit Do
<блок операторов>
Loop
Untilуказывает, что цикл выполняется до тех пор, пока <условие> не станет истинным. Минимальное число повторений тела цикла – 0.
4) условие False в конце цикла
Do
<блок операторов>
Exit Do
<блок операторов>
Loop Until <условие>
Условие проверяется в конце, цикл прекращается, когда условие станет истинным. Минимальное число повторений тела цикла – 1.
Пример 19.26.Выполнение логически прерываемых циклов
Текст программы | Комментарий | |
Option Explicit Sub Do_Rnd() Dim a As Single Dim i As Integer, Randomize Do While True a=Rnd | Обязательность объявления всех переменных перед их использованием Объявление имени процедуры без параметров Объявление переменных Вызов генератора случайных чисел Начало цикла Do. Задание условия выполнения цикла – цикл бесконечный Присвоение переменной случайного числа | |
Debug.Print a If a > 0.99 Then Exit Do Loop End Sub | Печать случайного числа Блок условия – при его выполнении выход из цикла Конец цикла Конец процедуры | |
Цикл While-Wend.Данный оператор полностью соответствует структуре Do While-Loop.Отличительной особенностью оператора является невозможность прервать выполнение цикла из тела цикла (Exit Doотсутствует), проверка условия выполняется только в начале цикла.
While <условие>
<блок операторов>
Wend
Цикл For Each.Оператор относится к категории операторов объектного типа, т.е. применяется к массивам (элементам) и наборам объектов. Выполняется фиксированное число раз, число объектов в наборе определяется автоматически. Упорядочение элементов набора – произвольное.
For Each <элемент> In <набор>
<блок операторов>
Exit For
<блок операторов>
где <элемент> представляет собой переменную типа Variant, <набор> – определенный набор объектов. Для прерывания цикла используется оператор Exit For.