Выполняет одну из нескольких групп инструкций в зависимости от значения выражения.
Select Case выражение ] ... ] End Select
Параметры
выражение
Обязательный. Любое числовое выражение или строковое выражение.
списокВыражений-n
Обязательный при наличии предложения Case
. Список с разделителями, состоящий из одной или нескольких форм следующего вида: выражение, выражение To выражение, Is
операторСравнения выражение. Ключевое слово To
задает диапазон значений. При использовании ключевого слова To перед ним должно находиться меньшее значение. Ключевое слово Is с операторами сравнения (кроме Is и Like) задает диапазон значений. Если ключевое слово Is
не указано, оно вставляется по умолчанию.
инструкции-n
Необязательный. Одна или несколько инструкций, выполняемых в том случае, если выражение совпадает с любым компонентом списка списокВыражений-n.
инструкции_else
Необязательный. Одна или несколько инструкций, выполняемых в том случае, если выражение не совпадает не совпадает ни с одним из предложений Case
.
Замечания
Если выражение совпадает с любым выражением из спискаВыражений в предложении Case
, выполняются все инструкции, следующие за данным предложением Case
до следующего предложения Case
, или, для последнего предложения, до инструкции End Select
. Затем управление передается инструкции, следующей за End Select
. Если выражение совпадает с выражениями из списка в нескольких предложениях Case
, выполняется только первый подходящий набор инструкций.
Предложение Case Else
задает список инструкции_else, которые будут выполнены, если не обнаружено ни одно совпадение выражения и компонента списокВыражений ни в одном из остальных предложений Case. Хотя данное предложение не является обязательным, рекомендуется помещать предложение Case Else
в блок Select Case
, чтобы предусмотреть неожиданные значения выражения. Если ни в одном предложении Case
списокВыражений не содержит компонента, отвечающего аргументу выражение, и отсутствует инструкция Case Else
, выполнение продолжается с инструкции, следующей за инструкцией End Select
.
В каждом предложении Case
допускается использование нескольких выражений или диапазонов. Например допустима следующая строка:
Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber
Следует отличать оператор сравнения Is
от ключевого слова Is
, используемого в инструкции Select Case
.
Имеется также возможность задать диапазоны или несколько выражений для строковых значений. В следующем примере предложение Case
выполняется для строк, которые точно совпадают со строкой "все", для строк, лежащих в алфавитном порядке между "орехи" и "яблоки", и для строк со значением, равных текущему значению переменной TestItem
:
Case "все", "орехи" To "яблоки", TestItem
Допускаются вложенные инструкции Select Case
. Каждой вложенной инструкции Select Case
должна соответствовать инструкция End Select
.
Пример
В данном примере инструкция Select Case
используется для анализа значения переменной. Второе предложение Case
содержит значение анализируемой переменной и следовательно выполняется только инструкция, связанная с этим предложением.
Dim Number Number = 8 " Инициализирует переменную. Select Case Number " Анализирует число. Case 1 To 5 " Число между 1 и 5. Debug.Print "Между 1 и 5" " Это предложение Case является единственным истинным. Case 6, 7, 8 " Число между 6 и 8. Debug.Print "Между 6 и 8" Case Is > 8 And Number < 11 " 9 или 10. Debug.Print "Больше 8" Case Else " Другие значения. Debug.Print "Вне интервала 1 -- 10" End Select
В Visual Basic for Application (VBA) существует несколько способов изменения порядка выполнения инструкций. Управляющие структуры VBA во многом схожи с подобными структурами в других языках программирования.Основные управляющие структуры VBA:
Управляющая инструкция If Then Else "End If
Эта инструкция изменяет порядок выполнения инструкций в зависимости
от результатов проверки заданного условия (или набора условий)
Пример:
Sub TestIfThen()
iData = "pashulka"
If iData = "Excel" Then
MsgBox "Этого сообщения Вы не увидите никогда!!!"
ElseIf iData = "Office" Then
MsgBox "К сожалению, этого сообщения Вы тоже не увидите!!!"
Else
MsgBox "Это сообщение появится в любом случае",iData
End If
Комментарии:
If
- ключевое слово, означающее начало проверки
iData
- переменная, значение которой будет проверяться
Then
- ключевое слово, означающее конец проверки
MsgBox
- сообщение
ElseIf
- ключевое слово, означающее начало новой проверки
Then
- ключевое слово, означающее конец дополнительной проверки
MsgBox
- сообщение
Else
- ключевое слово, означающее конец блока инструкций,
выполняемых при положительном результате проверки, и начало блока инструкций,
выполняемых при отрицательном результате.
MsgBox
- сообщение
End If
В инструкции If Then Else "End If ключевые слова ElseIf и Else являются необязательными.
Управляющая инструкция For Next
Эта инструкция позволяет выполнять определённые действия нужное
количество раз. Такие инструкции, как правило, называют циклами.
Пример:
Sub TestForNext()
For iCount = 1 To 100 Step 2
i = i + 1
Next
Комментарии:
For
iCount
- переменная, определяющая число повторений цикла.
1
- начальное значение счётчика
To
- ключевое слово, разделяющее начальное и конечное значение счётчика
100
- конечное значение счётчика
Step
- ключевое слово, определяющее шаг счётчика
2
- шаг счётчика (число)
Next
- ключевое слово, при достижении которого значение счётчика
изменяется на величину шага, после чего управление опять переходит в начало
цикла.
MsgBox
В инструкции For Next ключевое слово Step является необязательным. При его отсутствии, шаг выполнения счётчика будет равен 1.
важно Шаг счётчика обязательно должен быть числом. Если шаг счётчика указан в виде отрицательного числа, то тогда значение счётчика будет с каждым циклом будет уменьшаться.
Пример, с обратным отсчётом:
Sub TestForNext2()
For iCount = 300 To 1 Step -3
i = i + 1
If iCount = 153 Then Exit For
Next iCount
MsgBox "Число повторений: " & i
Обратите внимание на:
If
iCount = 153 Then
- в этом VBA коде мы применили уже
известную нам инструкцию If Then Else
Exit For
Next iCount
- в коде присутствует переменная (счётчик), который
располагается после ключевого слова. Подобный синтаксис используется, как
правило, для визуального определения конца цикла, если в VBA коде присутствует
достаточно много подобных инструкций.
Управляющая инструкция While Wend
Эта инструкция позволяет выполнять определённые действия до тех пор,
пока соблюдается заданное условие.
Пример:
Sub TestWhileWend()
While iCount iCount = iCount + 1
Wend
Комментарии:
While
- ключевое слово, означающее начало цикла
iCount - условие, при соблюдении которого будет выполняться эта
инструкция
Wend
MsgBox
- сообщение о количестве повторений
Управляющая инструкция Do Loop
Эта инструкция позволяет выполнять определённые действия не только до
тех пор, пока соблюдается заданное условие, но и наиборот, пока не будет
выполнено заданное условие.
Пример:
Sub TestDoLoop()
Do Until iCount >= 100
iCount = iCount + 1
Loop
MsgBox "Число повторений: " & iCount
Комментарии:
Do
- ключевое слово, означающее начало цикла
Until
- ключевое слово, означающее наличие условия
iCount >= 100
- условие, при соблюдении которого будет выполняться эта
инструкция
Loop
- ключевое слово, означающее конец цикла
MsgBox
- сообщение о количестве повторений
Sub TestDoLoop2()
Do
iCount = iCount + 1
If iCount = 50 Then Exit Do
Loop Until iCount = 100
MsgBox "Число повторений: " & iCount
Обратите внимание на:
If
iCount = 50 Then
- в этом VBA коде мы опять применили
уже известную нам инструкцию If Then Else
Exit Do
- инструкция означающая досрочный выход из цикла
iCount = 100
- условие, при соблюдении которого будет
выполняться эта инструкция
Примечание:
Условие заданное в конце цикла гарантирует, что он будет выполнен хотя
бы один раз. Будьте осторожны с инструкциями While Wend, Do Loop, так как
при некорректном задании условия, Вы можете получить практически perpetuum
mobile.
Управляющая инструкция Select Case "End Select
Эта инструкция в зависимости от результатов значения переменной или выражения
выполняет один из нескольких фрагментов кода.
Пример:
Sub TestSelectCase()
Select Case iNumeric
Case 1
Case 2, 5
MsgBox "Это сообщение Вы не должны увидеть"
Case 10 To 13
MsgBox "Это сообщение Вы не должны увидеть"
Case Is > 14
MsgBox "Именно это сообщение Вы и должны увидеть"
Case Else
MsgBox "Это сообщение появится, если переменная будет End Select
Комментарии:
Select Case
iNumeric
- переменная или выражение, значение которой определяет
выбор фрагмента VBA кода для выполнения
Case 1
- первый вариант значения для сравнения.
Если значение переменной совпадёт с ним, то будет выполнен фрагмент кода
следующий за Case, но до следующего ключевого Case, затем инструкция завершит
свою работу. В противном случае проверка продолжится.
Case 2, 5
- второй вариант значения.
Case 10 To 13
- третий вариант значения.
Case Is > 14
- четвёртый вариант значения.
MsgBox
- сообщение, которое будет выведено в данном случае
Case Else
- ключевые слова, означающее выполнение кода, если ни одно
из предыдущих вариантов не совпало.
End Select
- ключевое слово, означающее конец инструкции
В инструкции Select Case "End Select ключевое слово Case Else является необязательным.
Управляющая инструкция For Each Next
Эта инструкция позволяет выполнять определённые действия с каждым
об"ектом семейства или элементом массива.
Пример с об"ектом Range:
Sub TestForEachNextRange()
i = i + 1
iCell.Value = "Ячейка # " & i
Next
MsgBox "Число ячеек: " & i
Комментарии:
For Each
- ключевые слова, означающее начало инструкции
iCell
- переменная, которой присваиваются значения элементов
группы (массива или семейства) Для работы с элементами массива переменная
должна принадлежать к типу Variant.
In
- ключевое слово, отделяющее переменную от группы
Range("A1:C5")
- группа, т.е. массив или семейство об"ектов.
Количество повторений цикла зависит от числа элементов, входящих в группу.
При первом выполнении цикла переменной присваивается значение самого первого
элемента группы, а затем, всех последующих.
Next
- ключевое слово, при достижении которого управление опять
переходит в начало цикла.
MsgBox
- сообщение о количестве элементов группы.
В данном случае использовать подобный подсчёт числа ячеек в об"екте Range является не лучшим способом, так как у этого об"екта существует свойство, которое справится с этой задачей гораздо лучше: Об"ект Range: его свойства и методы
Пример манипуляции с об"ектом Range:
Sub TestForEachNextRangeChanges()
For Each iCell In Range("A1:C5")
i = i + 1: iCell.Value = i
If iCell.Value 5 Then
iCell.Font.Size = 15
iCell.Interior.ColorIndex = 50
ElseIf iCell.Value = 13 Or iCell.Value = 5 Then
iCell.Font.Size = 20
iCell.Interior.ColorIndex = 3
Else
iCell.Clear
End If
Обратите внимание на:
- в этом VBA коде для проверки значений находящихся в ячейке мы
применили уже известную нам инструкцию If Then Else.
- в зависимости от того какое условие прошло проверку, выполняется
определённый фрагмент кода, который использует различные свойства
об"екта Range.
Пример с семейством WorkSheets:
Sub TestForEachNextSheet()
For Each iList In Worksheets
i = i + 1
iNameList = iNameList & Chr(10) & iList.Name
Next
MsgBox "Число рабочих листов: " & i & Chr(10) & _
"Имена рабочих листов: " & iNameList
В данном случае использовать подобный подсчёт числа рабочих листов является не лучшим способом, так как у этого об"екта также существует свойство, которое справится с этой задачей гораздо лучше.
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 E lse
[Блок_операторов_N]]
E nd S elect
– Выражение_выбора – любое числовое или символьное выражение;
– Список_выражений – каждый из списков представляет собой список логических выражений, отделенных запятыми; имеют тот же тип, что и выражение_выбора;
– Блок_операторов – содержит любое количество операторов VBA.
При выполнении оператора Select Case VBA сначала оценивает Выражение_выбора, а затем сравнивает результат этого выражения с каждым выражением, перечисленным в каждом Списке_выражений. Если значение, представленное с помощью Выражение_выбора совпадает с выражением в Списке_выражений для одного из Case ,VBA выполняет Блок_операторов для этого предложения Case .Если значение Выражение_выбора совпадает более, чем с одним оператором Case ,VBA выполняет только операторы в первом совпадающем предложении Case .Часто Выражение_выбора – это просто имя одной переменной, математическое или численное, а не логическое выражение. Выражения в Списке_выражений – это обычно логические выражения.
После завершения выполнения операторов в первом совпадающем операторе Case VBA продолжает выполнение кода с первого оператора после ключевых слов End Select ,которые обозначают конец Select Case .
Если значение Выражение_выбора не совпадает ни с каким из Case ,а необязательный Case Else присутствует, VBA выполняет операторы, представленные с помощью Блок_операторов_N перед переходом к оператору после Select Case . Блок операторов Case E lse выполняется только в том случае, если Выражения_выбора не удовлетворяет ни одному из условий Case . Обычно используется для обработки нежелательных значений. Действие оператора Select Case поясняется блок-схемой, приведенной на рис. 5.
Рис 5. Блок-схема конструкции Select Case
Элементы Списка _ выражений должны иметь одну из следующих трех форм:
Выражение_1,Выражение_2, …, Выражение_N
Выражение Т o Выражение
I s Выражение с операцией
– Выражение_ – любое числовое, символьное или логическое выражение того же типа, что и выражение выбора;
– Выражение с операцией – выражение, содержащее любую из следующих операций: <, <=, >, >=, < >, =.
Если используется ключевое слово Т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
Case Is > 500
Case Else
End Select
MsgBox "Скидка" & skidka & "%"
MsgBox "Сумма покупки не указана"
Оператор Select Case VBA языка предназначен для формирования выбора операции в зависимости от значения, по сути, данный оператор выбора является гибридом условного оператора vba if then. Все довольно просто – в сценарии есть переменная, значение которой будет изменяться, и в зависимости от значения нужно выбрать, какой блок кода (выражение) выполнить.
Как и в условном операторе , тут происходит проверка значения, например: есть текстовое поле, в которое нужно ввести данные, допустим, возраст. Далее следует проверить введенное значение, если значение меньше 18 – вывести один текст, если значение находится между 19 и 30 – другой текст, в противном случае – вывести третий текст. Как уже говорилось, для таких целей можно использовать условный оператор, однако, оператор выбора VBA Select Case является более компактным варинтом.
Синтаксис оператора VBA Select Case:
Select Case значение
Select условие 1
Набор операторов
Select условие 2
Набор операторов
Select условие 3
Набор операторов
….
Select условие N
Набор операторов N
Case Else
Другие операторы
End Select
Вначале происходит проверка параметра “значение”, который может быть как строкового, так и числового типа, после проверки параметра, происходит поочередное сравнение (начиная сначала) с каждый условием, которые прописаны в операторах Select Case VBA. Если совпадение произойдет для “условие 1”, то будет выполнен “набор операторов 1”, после чего произойдет выполнения кода, находящегося после End Select . Оператор Case Else формально означает “В противном случае”, то есть, если ни одно из условий не подходит, то выполнится набор операторов, прописанных для Case Else. Само выражение VBA - Case Else не является обязательным, как и “другие операторы”, при необходимости его можно опустить, оно всегда прописывается в конце.
Давайте рассмотрим такой пример кода:
Private Sub CommandButton1_Click() Dim a a = TextBox1.Text Select Case a Case Is < 100 Label1.Caption = "Введенное значение меньше числа 100" Case 101 To 150 Label1.Caption = "Введенное значение больше числа 100 и меньше 151" Case 151 To 200 Label1.Caption = "Введенное значение больше 151 и меньше 201" Case Else Label1.Caption = "Другое значение, оператор Select Case VBA" End Select End Sub Private Sub UserForm_Activate() " начальные настройки "***************************** Label1.Caption = "" " размер текста Label1.FontSize = 15 " цвет текста Label1.ForeColor = &HFF0000 " выравнивание по центру Label1.TextAlign = fmTextAlignCenter " включить перенос строк Label1.WordWrap = True " надпись на кнопке CommandButton1.Caption = "Показать" "начальное сожержимое текстового поля TextBox1.Text = "Введите любое значение" End Sub |
В данном примере у нас есть процедура CommandButton1_Click , которая отвечает за обработку нажатия по кнопке. Переменная a будет хранить значение текстового поля TextBox1 (свойство Text). Далее следует оператор выбора Select case VBA языка, в котором происходит проверка значения переменной a, после чего, значение сравнивается с условиями:
- Case Is < 100 – если значение переменной a меньше числа 100
- Case 101 To 150 – если значение находится в диапазоне от 101 до 150
- Case 151 To 200 – диапазон проверки от 151 до 200
- Case Else – собственно, всю другие значения.
В зависимости от результат проверки, в свойство Caption, объекта , будет записанное информативное сообщение.
Процедура UserForm_Activate содержит строки кода для начальной настройки компонентов формы – цвет, размер, начальный текст и так далее.
Результат выполнения макроса вы можете увидеть на рисунке. Для создания связи между макросом и формой, в блоке кода для модуля нужно прописать:
Sub OBModule() OBForm.Show End Sub |
Тут OBModule – имя модуля (макроса), а OBForm – название формы.
Стоит обратить внимание, что даже при совпадении условие, например: меньше 100 и больше 99, в операторе выбора Select Сase произойдет выполнения лишь для первого подходящего условия, а все остальные будут проигнорированы.