Тема: «Операторы управления»
Цель занятия: рассмотреть операторы управления в VBA
Форма проведения: индивидуальное задание
Задание:
1. Изучить операторы перехода и операторы выбора
2. Привести примеры составления программ на ветвящиеся алгоритмы
3. Составить отчет
МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ
Обычно процедура VBA выполняет инструкцию Sub или Function, а затем все последующие инструкции до тех пор, пока не достигнет утверждения End Sub или End Function. Во многих случаях этого достаточно. Если затем снова запустить макрос, то повторно выполняется та же последовательность записанных действий.
Однако иногда требуется многократно выполнять некоторый набор инструкций автоматически, либо решить определенную задачу по-другому в зависимости от значения переменных или параметров, заданных пользователем во время выполнения. VBA включает ряд инструкций, предназначенных для управления порядком выполнения команд программы.
Инструкция If…Then…Else выполняет определенные команды или наборы команд в зависимости от значения условия. Данную инструкцию можно записать в одну или несколько строк.
Инструкция If, записанная в одну строку, имеет следующий синтаксис:
If условие Then [инструкции] [Else инструкции_else]
Параметр условие – логическое выражение, которое возвращает значение Trueили False. Если выражение равно True, то выполняются инструкции, а часть Else игнорируется. Если условие равно False, то игнорируются инструкции, а выполняются утверждения инструкции_else. Если же часть Else опущена и логическое условие равно False, то не выполняется ни одна из инструкций и управление передается следующей строке программы после инструкции If.
Описанная форма условного оператора используется при обработке простых логических условий, например:
If Sales > 15000 Then Comission=0.08 Else Comission=0.05
В данном примере если сумма продаж больше 15000 грн., то комиссионные устанавливаются на уровне 8 процентов. В противном случае, взимается 5 процентов.
Во многих реальных ситуациях требуется выполнить несколько инструкций, если условие истинно. В этих случаях необходимо использовать многострочный синтаксис:
If условие Then
[инструкции]
[ElseIf условие-n Then
[инструкции_elseif]...
[Else
[инструкции_else]]
End If
Многострочная структура удобнее. Каждая группа инструкций может включать произвольное число утверждений. Приведем пример программы, в которой используется многострочный синтаксис инструкции If:
If Sales > 15000 Then Commission = 0.08 Rating = "Отлично" AnnualSales = AnnualSales + Sales Else | Commission = 0.05 Rating = "Средне" AnnualSales = AnnualSales + Sales End If |
Необязательная часть ElseIf используется для задания дополнительных условий в той же структуре:
If Sales > 15000 Then Commission = 0.08 Rating = "Отлично" ElseIf Sales > 12000 Then Commission = 0.07 Rating = "Хорошо" ElseIf Sales > 9000 Then | Commission = 0.06 Rating = "Удовлетворительно" Else Commission = 0.05 Rating = "Неудовлетворительно" End If AnnualSales = AnnualSales + Sales |
При использовании инструкции If следует обратить внимание на следующие особенности:
- В многострочной структуре инструкции, которые выполняются если условие истинно, нельзя располагать утверждения на той же строке, что и ключевое слово Then. В противном случае не распознается многострочный синтаксис инструкции If.
- В многострочной структуре каждой инструкции If должна соответствовать своя инструкция End If. В однострочном синтаксисе инструкции End If не имеется.
Инструкция If может использоваться практически во всех случаях. Однако в VBA имеются и другие инструкции, которые в некоторых случаях оказываются более удобными.
Инструкция Select Case используется для выполнения одной из нескольких групп инструкций в зависимости от значения условия. Синтаксис данной команды имеет вид:
Select Case выражение [Case списокВыражений-n [инструкции-n]]... | [Case Else [инструкции_else]] End Select |
Параметр выражение – любое числовое или строковое выражение. Вместо вычисления логического условия выполняется сравнение значения выражения с каждой из величин, заданных параметром СписокВыражений-n. В инструкции может быть произвольное число блоков Case. Если ни одно из условий не является истинным, то выполняются инструкции блока Case Else.
Рассмотрим пример, в котором определяется тариф за минуту телефонных переговоров с некоторым городом:
Select Case StateOfResidence Case "Прага" SalesTax = 0.0525 Case "Киев" SalesTax = 0.045 | Case "Минск" SalesTax = 0.065 Case Else SalesTax = 0 End Select |
В данном примере тариф зависит от города, с которым связывается клиент. Переменной StateOfResidence требуется предварительно присвоить строковое значение, которое затем сравнивается с названием каждого из перечисленных городов. Если совпадения значений не найдено, то плата за услуги не взимается.
Инструкция Select Case может также использоваться для проверки вхождения значения в заданное множество величин, например, для задания системы скидок:
Select Case UnitsOrdered Case 1 To 10 Discount = 0 Case 11 To 19 | Discount = 0.05 Case Is >= 20 Discount = 0.10 End Select |
Обратите внимание, что выражение Case Is >= 20 позволяет обработать все значения переменной UnitsOrdered, которые больше 20. Если совпадений значений не обнаружено, то действий не производится, а управление передается команде, которая следует за инструкцией End Select.
Рассмотрим следующий пример:
AreaCode = "914" Select Case AreaCode Case "212", "718" City = "Нью Йорк" Case "312" | City = "Чикаго" Case "213" City = "Париж" End Select |
В данном примере, если значение переменной City не равно ни одному из названий городов, то она остается неинициализированной или сохраняет значение, заданное ей ранее. Это может привести к логической ошибке. Поэтому рекомендуется на всякий случай указывать в инструкции Select Case блок Case Else.
Из простых логических условий можно составить сложные при помощи логических операций:
And (и),
Or (или),
Not (не).
Примерами сложных условий могут быть:
(0 < A) And (A <= 1),
(X = 0) Or (Abs(X) <5),
Not (X=Y).
Сложные условия могут служить частями еще более сложных и т. д. Истинность любого условия можно вычислить при помощи таблицы значений логических операций:
false AND false = false false OR true = true
false AND true = false true OR false = true
true AND false = false true OR true = true
true AND true = true NOT false = true
false OR false = false NOT true = false