Операторы ветвления VBA: сложный выбор. Безусловный переход
В реальных программах зачастую бывает необходимо выполнять более сложный выбор в процедурах, выбирая между тремя и более ветвями. В этом случае можно помещать операторы If..Then..Else друг в друга. Это называется вложением операторов.
![](img/lsn0112_1.jpg)
Вышепоказанная процедура использует несколько вложенных друг в друга операторов условного перехода. Следует сказать, что такая процедура будет работать только в Excel, т.к. использует метод Application.InputBox (см. Функции host-приложений). Этот метод не дает пользователю во время работы функции ввести что-либо, кроме числа.
Если пользователь вводит не число, то получает об этом сообщение.
![](img/lsn0112_3.jpg)
Если пользователь ничего не вводит, то получает сведение об ошибке.
![](img/lsn0112_2.jpg)
Если пользователь воспользуется кнопкой "Отмена", то получает сообщение "Не введены данные".
VBA предоставляет сокращенную версию оператора If..Then..Else, являющуюся сжатым эквивалентом вложенных операторв If..Then..Else, использованных в листинге. Такой краткой формой является операторIf..Then..ElseIf
![](img/lsn0112_4.jpg)
Какой из вариантов использовать - вопрос, который решает каждый программист для себя индивидуально. Считается, что второй вариант более компактный, тогда как первый - более удобный и понятный.
Для выполнения выбора из нескольких возможных ветвей кода можно вкладывать операторы If..Then..Else на много уровней вглубь, но уследить за ходом выполнения ветвей становится все труднее и труднее.
VBA имеет условный оператор перехода для использования в случаях, когда необходимо выбирать из большого количества различных ветвей кода - Select Case. Он работает практически так же, как и Else..If, но более понятен.
Ключевые слова Select Case используются со многими операторами Case, где каждый оператор Case проверяет появление другого условия и выполняется только одна из ветвей Case. Ветвь Case может содержать один, несколько или ни одного оператора VBA.
![](img/lsn0112_5.jpg)
Оператор безусловного перехода
Оператор безусловного перехода, можно сказать, является рудиментом от ранних языков программирования, в которых он являлся практически единственным средством организации циклических выполнений блоков кода.
Оператор безусловного перехода всегда изменяет порядок выполнения операторов в процедуре или функции. При этом не проверяется никаких условий.
Синтаксис:
GoTo line
line - любая допустимая метка или номер строки в той же процедуре или функции, которая содержит оператор GoTo.
При выполнении оператора GoTo управление выполнения программы немедленно передается оператору в строке, определенной с помощью метки line.
![](img/lsn0112_6.jpg)
В среде программистов считается, что любую логику программы можно организовать без применения оператора безусловного перехода. Поэтому, применение GoTo может быть оправдано только в исключительных случаях.