Упражнение 4
Изучите оператор варианта Select Case.
Скопируйте код процедуры CaseSelect в модуль, выполните процедуру при различных значениях ячейки A6 и проанализируйте результаты её выполнения.
Упражнение 5
Создать процедуру определения количества проданных товаров в зависимости от цены товаров в соответствии с приведённой ниже таблицей.
Цена
Количество проданных товаров
<=10
100
<=15
80
<=20
60
>20
50
В созданной процедуре использовать инструкцию If…Then…Else, содержащую ключевое слово ElseIf; использовать функцию InputBox для ввода значений переменной Цена.
Составьте и выполните процедуру в соответствии с заданием, используя инструкцию Select Case с наличием ветви Case Else.
Оператор безусловного перехода GoTo
Оператор GoTo изменяет ход выполнения программы без проверки каких-либо условий, передавая управление на метку в коде. Формат инструкции GoTo:
GoTo метка
Обязательный аргумент метка может быть текстовым или числовым. Метка заканчивается символом двоеточие(:).
В приведённой ниже процедуре БезУслПереход на экран выводится число 10, если значение r = 1 и строка m20, в противном случае.
Sub БезУслПереход()
Dim r
r = InputBox("Иллюстрация инструкции безусловного перехода")
If r = 1 Then GoTo 10 Else GoTo m20
10:
MsgBox 10
Exit Sub
m20:
MsgBox "m20"
End Sub
Использование GoTo удобно в очень редких случаях, например, когда нам нужно добиваться от пользователя ввода правильного значения неизвестное число раз. Однако использование GoTo считается признаком плохого тона в программировании и категорически не рекомендуется, потому что код становится трудночитаемым. Кроме того использование GoTo противоречит принципам структурного программирования, в некоторых источниках даже даётся такое определение: «Структурное программирование – это программирование без GoTo». Оператор GoTo можно заменить операторами организации циклов, использованием операторов If или Select Case. Например, приведённая ниже процедура УслПереход, реализует тот же алгоритм, что и процедура БезУслПереход:
Sub УслПереход()
Dim r
r = InputBox("Иллюстрация инструкции условного перехода")
If r = 1 Then MsgBox 10 Else MsgBox "m20"
End Sub
Упражнение 6
Скопируйте процедуры БезУслПереход и УслПереход при различных значениях переменной r, выполните и проанализируйте результат.
Операторы перехода к обработчику ошибок On Error
Оператор On Error делает доступным обработчик ошибок и определяет его положение внутри процедуры и используется также для запрета обработки ошибок. Оператор имеет три формата синтаксиса:
On Error GoTo строка
On Error Resume Next
On Error GoTo 0
On Error GoTo строка делает доступным обработчик ошибок, который начинается со строки, определённой меткой строка. При возникновении ошибки управление выполнением программы передаётся на строку кода с меткой строка. Таким образом, происходит активизация обработчика ошибок. Метка строка должна находиться в той же процедуре, что и инструкция On Error.
On Error Resume Next указывает на то, что при возникновении ошибки управление выполнением программы передаётся на оператор, следующий непосредственно за тем, в котором произошла ошибка. Это действие позволяет продолжить выполнение программы, несмотря на возникновение ошибки времени выполнения (run-time error).
On Error GoTo 0 отключает пользовательский обработчик ошибок в данной процедуре. Эта инструкция не указывает метку 0 в качестве начала обработчика ошибки, даже если в процедуре действительно имеется такая метка.
Пользовательские обработчики ошибок позволяют реагировать на ошибки во время работы пользователя, например, когда вместо числа пользователь вводит текстовое данное или вообще не вводит данное.
В процедуре ПримерOnErrorGoto, приведённой ниже, возникает ошибка ввода до тех пор, пока не будет введено численное значение переменной Num; управление передаётся на метку Ошибка, и оператор Resume возвращает управление оператору Num = InputBox("Введите число").
Sub ПримерOnErrorGoto()
Dim Num As Single
On Error GoTo Ошибка
Num = InputBox("Введите число")
MsgBox "Введено число " & Num
Exit Sub
Ошибка:
MsgBox "Число не введено "
Resume
End Sub
В процедуре ПримерOnErrorResumeNext при возникновении ошибки ввода управление передаётся инструкции If, т.е. инструкции, следующей за той, которая вызвала ошибку, на экран выводится сообщение "Число не введено".
Sub ПримерOnErrorResumeNext()
Dim Num As Single
On Error Resume Next
Num = InputBox("Введите число,не равное 0")
If Num <> 0 Then
MsgBox "Введено число " & Num
Else
MsgBox "Число не введено"
End If
On Error GoTo 0
End Sub
В процедуре ПримерOnErrorGoto_0 оператор On Error GoTo 0 отключает пользовательский обработчик ошибок в данной процедуре и может быть использован для восстановления нормальной обработки ошибок перед выходом из процедуры. При возникновении ошибки ввода выводится следующее диалоговое окно, сообщающее о несоответствии типа данного введённому значению (“Пусто” или “Не число”).
Sub ПримерOnErrorGoto_0()
Dim Num As Single
On Error GoTo 0
Num = InputBox("Введите число")
MsgBox "Введено число " & Num
End Sub
