Лабораторная работа. Основы работы в VBA. Алгоритмическая структура - ветвление
4. Оператор Select … Case
VBA имеет условный оператор перехода для использования в случаях, когда необходимо выбирать из большого количества различных ветвей кода: оператор Select Case (с его помощью очень удобно реализовывать структуру множественного выбора). Он работает во многом так же, как множество независимых операторов If, но он более понятен для того, кто пишет код, и того, кто читает этот код. Этот оператор более эффективен, чем оператор If…Then…Else.
Ключевые слова Select Case используются со многими операторами Case, где каждый оператор Case проверяет появление другого условия и выполняется только одна из ветвей Case. Ветвь Case может содержать один, несколько или ни одного оператора VBA.
Select Case – управляющий оператор, выполняющий один из нескольких блоков операторов в зависимости от значения выражения.
Select Case Выражение_выбора
[ Case Список_выражений_1
[Блок_операторов_1]
[Case Список_выражений_2 ]
[Блок_операторов_2]]
……………………………………………………………………………
[Case Else
[Блок_операторов_N]]
End Select
– Выражение_выбора – любое числовое или символьное выражение;
– Список_выражений – каждый из списков представляет собой список логических выражений, отделенных запятыми; имеют тот же тип, что и выражение_выбора;
– Блок_операторов – содержит любое количество операторов VBA.
При выполнении оператора Select Case VBA сначала оценивает Выражение_выбора, а затем сравнивает результат этого выражения с каждым выражением, перечисленным в каждом Списке_выражений. Если значение, представленное с помощью Выражение_выбора совпадает с выражением в Списке_выражений для одного из Case, VBA выполняет Блок_операторов для этого предложения Case. Если значение Выражение_выбора совпадает более, чем с одним оператором Case, VBA выполняет только операторы в первом совпадающем предложении Case. Часто Выражение_выбора – это просто имя одной переменной, математическое или численное, а не логическое выражение. Выражения в Списке_выражений – это обычно логические выражения.
После завершения выполнения операторов в первом совпадающем операторе Case VBA продолжает выполнение кода с первого оператора после ключевых слов End Select, которые обозначают конец Select Case.
Если значение Выражение_выбора не совпадает ни с каким из Case, а необязательный Case Else присутствует, VBA выполняет операторы, представленные с помощью Блок_операторов_N перед переходом к оператору после Select Case. Блок операторов Case Else выполняется только в том случае, если Выражения_выбора не удовлетворяет ни одному из условий Case. Обычно используется для обработки нежелательных значений. Действие оператора Select Case поясняется блок-схемой, приведенной на рис. 5.
Рис 5. Блок-схема конструкции Select Case
Элементы Списка _ выражений должны иметь одну из следующих трех форм:
Выражение_1,Выражение_2, …, Выражение_N
Выражение Тo Выражение
Is Выражение с операцией
– Выражение_ – любое числовое, символьное или логическое выражение того же типа, что и выражение выбора;
– Выражение с операцией – выражение, содержащее любую из следующих операций: <, <=, >, >=, < >, =.
Если используется ключевое слово Тo для определения пределов выражения, то меньшее значение должно быть первым. Например, операторы блока Case -1 To -5 не выполняются, если Выражение _ выбора равно -4. Эта строка должна быть написана как Case -5 To -1.
Операции сравнения можно использовать только с ключевым словом Is, за исключением операции равенства. При отсутствии ключа Is в нужном месте интеллектуальный редактор вставит его.
Можно использовать несколько выражений или пределов в каждом условии Case. Например, Case 1 TO 4, 7 TO 9, 11, 13, Is > n %.
Пример 4. Программа, рассчитывающая скидку в зависимости от суммы покупки.
Sub skidka()
' Определение скидки (в %) в зависимости от
' количества продаваемого товара
Dim skidka As Integer
Dim summa As Single
summa = InputBox("Введите сумму покупки", "Расчет скидки", 0)
If summa > 0 Then
Select Case summa
Case Is > 1000
skidka = 10
Case Is > 500
skidka = 5
Case Else
skidka = 0
End Select
MsgBox "Скидка" & skidka & "%"
Else
MsgBox "Сумма покупки не указана"
End If
End Sub