Функция |
Описание |
Функция |
Описание |
Not |
Инверсия или отрицание |
Хоr |
Исключающее "Или" |
And |
Логическое "И" |
Imp |
Импликация |
Or |
Логическое "ИЛИ" |
Eqv |
Эквивалентность |
Последовательно выполняется проверка истинности выражений. Если выражение 1 истинно, выполняется блок операторов 1, иначе выполняется проверка истинности выражения 2 и т.д.
Если ни одно из выражений не соответствует требованиям истинности, выполняется блок операторов Else, если оно имеется, иначе – оператор, следующий за End If.
Пример 19.23. Организация проверки условия блочной структурой оператора If
Текст программы |
Комментарий |
If AvgPrice > 12000 Then |
Проверка условия 1 |
DiffPrice=Full(234, 45600) |
Если условие 1 истинно, вызов процедуры |
ElseIf AvgPrice > 24000 Then |
Проверка условия 2 |
DiffPrice=Full( 12000, 45000) |
Если условие 2 истинно, вызов процедуры |
ElseIf AvgPrice > 36000 Then |
Проверка условия 3 |
DiffPrice=Full(24000, 50000) |
Если условие 3 истинно, вызов процедуры |
Else |
Если условия 1 – 3 не выполняются, вызов |
DiffPrice=Full(36000, 70000) |
процедуры |
End If |
Конец блока 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. Цикл ForNext может быть вложенным.
Пример 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 |
Внутренний цикл по числу столбцов в блоке ячеек |
|
Присваивание текущей ячейке случайного числа |
|
Selection – выбор ячейки |
|
Cells – метод доступа к ячейке с определенными |
|
координатами |
|
Value – свойство "значение" |
Next thecol |
Конец внутренного цикла |
Next therow |
Конец внешнего цикла |
End Sub |
Конец процедуры |
Цикл 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 |
Начало цикла Do. Задание условия выполнения цикла – |
|
цикл бесконечный |
a=Rnd |
Присвоение переменной случайного числа |
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.
РАБОТА С ФАЙЛАМИ
Основные понятия
VBA работает с хранимыми на диске файлами двух типов: последовательного и произвольного доступа.
Последовательный файл – текстовый, который обрабатывается стандартными средствами текстовых редакторов, так как содержит строки символов в формате ANSI. Все операции с последовательными файлами реализуются от начала файла: при этом одновременно нельзя читать и писать в последовательный файл.
Файл произвольного доступа имеет записи фиксированной длины: можно одновременно выполнять чтение и запись в файл записей.