Как настроить смартфоны и ПК. Информационный портал

Операторы ветвления VBA: сложный выбор. Безусловный переход

ЯЗЫК ПРОГРАММИРОВАНИЯ VISUAL BASIC. ПРОГРАММИРОВАНИЕ ВЕТВЛЕНИЙ

Ветвление в Visual Basic организуется с использованием:

  • условного оператора IF;
  • встроенной функции IIF;
  • оператора выбора CASE.

Для проверки одного условия и выполнения оператора или блока операторов используется условный оператор IF...THEN . Этот оператор можно использовать с разным синтаксисом: однострочным (линейным) и многострочным (блочным).

Линейный оператор имеет следующий синтаксис:

If <условие> Then <операторы!>

Блочный оператор имеет следующий синтаксис:

If <условие> Then
<блок операторов 1>
End If

Если заданное условие имеет значение True, выполняется блок операторов, в противном случае - блок операторов2. Если предложение Else не задано, при не выполнении условия управление сразу же передается следующему после If оператору.

Оператор If может быть вложенным, т. е. находиться внутри блоков операторов. Для проверки более одного условия и выполнения одного из нескольких блоков операторов используется расширенный условный оператор вида:

If <условие 1> Then
<блок операторов 1>
Elself <условие 2> Then
<блок операторов 2>
Elself <условие n> Then
<блок операторов n>
End If

Для выбора одного из значений в зависимости от выполнения или невыполнения некоторого условия используется условная функция IIF, имеющая следующий синтаксис:

IIF (<условие>, <значение1>, <значение2>)

Эта функция возвращает значение1, если условие истинно, и значение2, если условие ложно.

В качестве условия можно использовать логическое выражение, возвращающее значение True (Истина) или

False (Ложь), или любое арифметическое выражение (нулевое значение эквивалентно False, а ненулевое - True).

Оператор выбора SELECT CASE используется для проверки одного условия и выполнения одного из нескольких блоков операторов.

Формат записи оператора:

Select Case <проверяемое выражение>
Case <список выражений 1>
<операторы 1> Case <список выражений 2>
<операторы 2> Case <список выражений 3>
<операторы 3>
Case Else
<операторы группы Else>
End Select

Проверяемое выражение вычисляется в начале работы оператора Select Case. Это выражение может возвращать значение любого типа (логическое, числовое, строковое).

Список выражений - одно или несколько выражений, разделенных стандартным символом - разделителем (точкой с запятой).

При выполнении оператора проверяется, соответствует ли хотя бы один из элементов этого списка проверяемому выражению.

Эти алименты списка выражений могут иметь одну из следующих форм:

  • <выражение> - проверяет совпадение заданного выражения с одним из выражений - элементов списка;
  • <выражение 1> То <выражение 2> - проверяет попадание заданного выражения в указанный диапазон;
  • < Is <логический оператор> < выражение> - проверяет выполнение указанного условия для заданного выражения.

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

Здесь явно не помешает пример, показывающий, как в действительности может выглядеть структура Select Case.

Select Case objRol l OfFi l m.Type

Case "Слайдовая"

intСлайдовые = intСлайдовые + 1

Case "Цветная негативная"

intЦветныеНегативные = intЦветныеНегативные + 1

Case "ЧБ негативная"

intЧБнегативные = intЧБнегативные + 1

MgaBox "Неизвестный тип пленки."

В основном этот фрагмент программного кода делает то же, что и приведенный выше программный код для примера из раздела об операторах If. . .ElseIf (опущена только проверка срока хранения). Правда, с тех пор наш гипотетический объект, представляющий ролик пленки, похоже, был немного модифицирован - информация о цветностибесцветности пленки теперь тоже представляется свойством Туре, а не отдельным свойством Color, как раньше.

А если дело обстоит таким образом, то программе приходится работать только с одним значением - со значением, возвращаемым свойством Туре. - но сравнивается это значение с несколькими из допустимых. Так что Select Case - это как раз то, что для нашего случая доктор прописал.

Первое применение оператора Case в данном примере эквивалентно применению If objRollOf Film.Type = "Слайдовая" Then, т.е. если свойство Туре объекта равно "Слайдовая", то программа выполняет следующий оператор, в противном случае она перейдет ко второму оператору Case.

Заметьте, что знака операции, присутствие которого кажется на первый взгляд логичным, в критериях нет. Причина в том, что в операторах Select Case равенство в качестве операции сравнения просто подразумевается.

Из книги ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ВСТРОЕННЫХ СИСТЕМ. Общие требования к разработке и документированию автора Госстандарт России

Из книги Компьютер + мобильник: эффективное взаимодействие автора Гольцман Виктор Иосифович

Отправка с сайта оператора На сегодняшний день уже, наверное, все операторы поддерживают отправку SMS со своего сайта. Сообщения, правда, можно отправить только абонентам данного оператора, но этого, как правило, бывает достаточно.Итак, к практике. Сейчас мы рассмотрим

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Пример: очереди сообщений Posix и функция select Дескриптор очереди сообщений (переменная типа mqd_t) не является «обычным» дескриптором и не может использоваться с функциями select и poll (глава 6 ). Тем не менее их можно использовать вместе с каналом и функцией mq_notify. (Аналогичный

Из книги VBA для чайников автора Каммингс Стив

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Проверка условий в операторах Select Case Структура Select Case не использует явным образом полные условные выражения, подобные тем, о которых шла речь выше (см. раздел "Курс на использование условных выражений"). Вы должны разбить каждое условие на две части, представленные как

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Из книги Язык Си - руководство для начинающих автора Прата Стивен

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

Из книги C++ для начинающих автора Липпман Стенли

Пример 10-24. Использование case #!/bin/bashecho; echo "Нажмите клавишу и затем клавишу Return."read Keypresscase "$Keypress" in ) echo "буква в нижнем регистре";; ) echo "Буква в верхнем регистре";; ) echo "Цифра";; *) echo "Знак пунктуации, пробел или что-то другое";;esac # Допускается указыватль

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Пример 10-25. Создание меню с помощью case #!/bin/bash# Грубый пример базы данныхclear # Очистка экранаecho " Список"echo " ------"echo "Выберите интересующую Вас персону:"echoecho "[E]vans, Roland"echo "[J]ones, Mildred"echo "[S]mith, Julie"echo "[Z]ane, Morris"echoread personcase "$person" in# Обратите внимание: переменная взята в кавычки.

Из книги автора

Пример 10-26. Оператор case допускает использовать подстановку команд вместо анализируемой переменной #!/bin/bash# Подстановка команд в "case".case $(arch) in # команда "arch" возвращает строку, описывающую аппаратную апхитектуру.i386) echo "Машина на базе процессора 80386";;i486) echo "Машина на базе

Из книги автора

Пример A-18. Генерация простых чисел, с использованием оператора деления по модулю (остаток от деления) #!/bin/bash# primes.sh: Генерация простых чисел, без использования массивов.# Автор: Stephane Chazelas.# Этот сценарий не использует класический алгоритм "Решето Эратосфена",#+ вместо него

Из книги автора

РАСШИРЕНИЕ ОПЕРАТОРА if С ПОМОЩЬЮ else Простейшей формой оператора if является та, которой мы только что воспользовались: if(выражение)оператор Обычно под выражением здесь понимают условное выражение, с его помощью сравниваются значения двух величин (например x > y

Из книги автора

18.8.2. Прекращение выполнения оператора case Рассмотрим следующий пример. В сценарии выполняется бесконечный цикл до тех пор, пока пользователь не введет число, большее 5. Для прерывания цикла и возврата в командную строку интерпретатора используется команда break.$ pg

Из книги автора

Из книги автора

Простой пример использования функции select Теперь мы переделаем код нашего получателя внеполосных данных и вместо сигнала SIGURG будем использовать функцию select. В листинге 24.3 показана принимающая программа.Листинг 24.3. Принимающая программа, в которой (ошибочно)

Управляющие структуры позволяют управлять последовательностью выполнения программы. Без операторов управления все операторы программы будут выполняться слева направо и сверху вниз. Однако иногда требуется многократно выполнять некоторый набор инструкций автоматически, либо решить задачу по-другому в зависимости от значения переменных или параметров, заданных пользователем во время выполнения. Для этого служат конструкции управления и циклы.

VBA поддерживает следующие конструкции принятия решений:

If . . . Then . . . Else

6.1 Конструкция If . . . Then

Конструкция If . . . Then применяется, когда необходимо выполнить один или группу операторов в зависимости от некоторого условия. Синтаксис этой конструкции позволяет задавать ее в одной строке или в нескольких строках программы:

If условие Then выражение If условие Then выражение End If

Обычно условие является простым сравнением, но оно может быть любым выражением с вычисляемым значением. Это значение интерпретируется как False (Ложь), если оно нулевое, а любое ненулевое рассматривается как True (Истина). Если условие истинно, то выполняются все выражения, стоящие после ключевого слова Then. Для условного выполнения одного оператора можно использовать как синтаксис для одной строки, так и синтаксис для нескольких строк (блоковую конструкцию).

Следующие два оператора эквивалентны:

If anyDate < Now Then anyDate = Now If anyDate < Now Then anyDate = Now End If

Заметим, что синтаксис оператора If . . . Then для одной строки не использует оператор End If. Чтобы выполнить последовательность операторов, если условие истинно, следует использовать блоковую конструкцию If . . . Then . . . End If.

If anyDate < Now Then anyDate = Now Timer.Enabled = False " Запретить таймер. End If

Если условие ложно, то операторы после ключевого слова Then не выполняется, а управление передается на следующую строку (или строку после оператора End If в блочной конструкции).

6.2 Конструкция If . . . Then . . . Else

определяет несколько блоков операторов, один из которых будет выполняться в зависимости от условия:

If условие1 Then выражение1 ElseIf условие2 Then выражение2 . . . Else выражение-n End If

При выполнении сначала проверяется условие1. Если оно ложно, VBA проверяет следующее условие2 и т. д., пока не найдет истинного условия. Найдя его, VBA выполняет соответствующий блок операторов и затем передает управление инструкции, следующей за оператором End if. В данную конструкцию можно включить блок оператора Else, который VBA выполняет, если не выполнено ни одно из условий.

Конструкция If . . . Then . . . ElseIf в действительности всего лишь специальный случай конструкции If . . . Then . . . Else. Заметим, что в данной конструкции может быть любое число блоков ElseIf, или даже ни одного. Блок Else можно включать независимо от присутствия или, наоборот, отсутствия блоков ElseIf.

Sub пример1() Dim a As Single, b As Single, x As Single Dim z As Double Call read("A1", a) Call read("B1", b) Let x = CSng(InputBox("введи x", "Ввод данных", 0)) If x <= a Then z = Sin(x) ElseIf x >= b Then z = Tan(x) Else: z = Cos(x) End If Call out("C1", z) End Sub

Заметим, что можно добавить любое число блоков Elself в конструкцию If . . . Then. Однако количество блоков Elself может стать настолько большим, что конструкция If . . . Then станет очень громоздкой и неудобной. В подобной ситуации следует применять другую конструкцию принятия решения - Select Case.

6.3 Конструкция Select Case

Конструкция Select Case является альтернативой конструкции If . . . Then . . . Else в случае выполнения блока, состоящего из большого набора операторов. Конструкция Select Case предоставляет возможность, похожую на возможность конструкции If . . . Then . . . Else, но в отличие от нее она делает код более читаемым при наличии нескольких вариантов выбора.

Конструкция Select Case работает с единственным проверяемым выражением, которое вычисляется один раз при входе в эту конструкцию. Затем VBA сравнивает полученный результат со значениями, задаваемыми в операторах Case конструкции. Если найдено совпадение, выполняется блок операторов, ассоциированный с оператором Case:

Select Case проверяемое_выражение ] ] . . . ] End Select

Каждый список выражений является списком из одного или более значений. Если в одном списке больше одного значения, они отделяются запятыми. Каждый блок операторов содержит несколько операторов или ни одного. Если окажется, что вычисленному значению проверяемого выражения соответствуют значения из нескольких операторов Case, то выполняется блок операторов, ассоциированный с первым оператором Case из всех найденных соответствий. VBA выполняет блок операторов, ассоциированный с оператором Case Else (заметим, что он необязателен), если не найдено ни одного соответствия проверяемого значения выражения и значений из всех списков операторов Case.

Рассмотрим пример вычисления функции

Sub пример2() Const pi2 = 1.57 Dim x As Single Dim z As Double Let x = CSng(InputBox("введи x", "Ввод данных", 0)) Select Case x Case -pi2 z = Sin(x) Case 0 z = Cos(x) Case pi2 z = Tan(x) Case Else MsgBox "Неверные исходные данные!" Exit Sub End Select Call out("D1", z) End Sub

Заметим, что конструкция Select Case вычисляет выражение только один раз при входе в нее, а в конструкции If . . . Then . . . Else вычисляются различные выражения для каждого оператора Elself. Конструкцию If . . . Then . . . Else можно заменить конструкцией Select Case, только если оператор If и каждый оператор Elself вычисляют одно и то же выражение.

Оператор 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 произойдет выполнения лишь для первого подходящего условия, а все остальные будут проигнорированы.

Лучшие статьи по теме