Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование VBA.pdf
Скачиваний:
374
Добавлен:
03.05.2015
Размер:
3.07 Mб
Скачать

90

если используется несколько команд или конструкции Else|ElseIf, то End If в конце нужно писать обязательно, иначе возникнет синтаксическая ошибка.

для выражения If…Then рекомендуется использовать отступы для выделения блоков команд, иначе трудно будет читать код.

операторы If…Then можно вкладывать друг в друга:

If R = 5 Then

MsgBox “Отлично”

If R = 4 Then

MsgBox “Хорошо”

End If

End If

2.12.4.2. Инструкция Select…Case

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

Select Case выражение

[Case список_выражений-n [инструкции-n]] ...

[Case Else

[инструкции_еlsе]]

End Select

Формат инструкции Select Case содержит следующие элементы:

Элемент инструкции

Описание элемента

 

Выражение

Обязательный. Любое числовое или строковое выражение

Список_выражений-n

Обязателен в случае использования Case. Список (сраздели-

 

телями) из одной или более следующих форм:

 

 

выражение

 

 

выражение To выражение

 

 

Is оператор_сравнения выражение

 

 

Ключевое слово To определяет диапазон значений, в котором

 

меньшее значение должно быть перед ключевым словом To.

 

Ключевое слово Is следует использовать с операторами

 

сравнения для указания диапазона значений. Если этот аргу-

 

мент не используется, автоматически подставляется ключе-

 

вое слово Is.

 

Инструкции-n

Необязательный. Одна или более инструкций, выполняемых,

 

если выражение совпадает с любым значением из Спи-

 

сок_выражений-n.

 

Инструкции_еlsе

Необязательный. Одна или более инструкций, выполняемых,

 

если Выражение не совпадает ни с каким

Case-

 

предложением список_выражений-n

 

91

Если выражение совпадает с любым из Case-выражений спи- сок_выражений-n, выполняются инструкции инструкции-n, следующие за этим Case-предложением (до следующего Case-предложения или последнего Case-предложения – до End Select). Управление выполнением программы передаётся инструкции, следующей за предложением End Select. Если выражение совпадает с список_выражений-n в нескольких Case-предложениях, выполняются инструкции, соответствующие первому совпадению. Предложение Case Else используется для указания группы инструкций инструкции_еlsе, которые следует выполнять, если ни в одном Case-предложении не нашлось совпадений. Конструкция Select Case допускает вложения. Инструкцию Case Else целесообразно использовать при выборе между тремя и более вариантами.

Приведённая ниже процедура CaseSelect позволяет решить ту же задачу, которую решает процедура IfThenElse4.

Sub CaseSelect()

Select Case Range ("A6") Case Is >= 0.84

MsgBox "Ваша оценка """ & "Отлично" & """"

Case 0.68 To 0.83

MsgBox " Ваша оценка """ & "Хорошо" & """"

Case Is > 0.5

MsgBox " Ваша оценка """ & "Удовлетворительно" & """"

Case Else

MsgBox " Ваша оценка """ & "Неудовлетворительно" & """"

End Select End Sub

2.12.4.3. Инструкция безусловного перехода 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

92

Exit Sub m20: MsgBox "m20" End Sub

Использование GoTo удобно в очень редких случаях, например, когда нам нужно добиваться от пользователя ввода правильного значения неизвестное число раз. Однако использование GoTo считается признаком плохого тона и категорически не рекомендуется, потому что код становится трудночитаемым. Инструкцию GoTo можно заменить инструкцией организации циклов, используя инструкцию If или Select Case, как это сделано в приведённой ниже процедуре УслОператор, реализующий тот же алгоритм, что и процедура БезУслПереход:

Sub УслОператор() Dim r

r = InputBox("Иллюстрация инструкции условного перехода") If r = 1 Then MsgBox 10 Else MsgBox "m20"

End Sub

2.12.4.4. Инструкции перехода к обработчику ошибок On Error

Инструкция On Error делает доступным обработчик ошибок и определяет его положение внутри процедуры и используется также для запрета обработки ошибок. Она имеет следующий формат:

On Error GoTo строка

On Error Resume Next On Error GoTo 0

Инструкция On Error имеет следующие формы:

On Error GoTo стро-

Делает доступным обработчик ошибок, который начинается

ка

со строки, определённой аргументом строка. Этот аргумент

 

может быть числом или буквенно-числовым. При возникно-

 

вении ошибки управление выполнением программы переда-

 

ётся на строку кода с меткой строка. Таким образом проис-

 

ходит активизация обработчика ошибок. Метка строка долж-

 

на находиться в той же процедуре, что и инструкция On

 

Error.

On Error Resume

Указывает на то, что при возникновении ошибки управление

Next

выполнением программы передаётся на инструкцию, сле-

 

дующую непосредственно за тем, в котором произошла

 

ошибка. Эта инструкция позволяет продолжить выполнение

 

программы, несмотря на возникновение ошибки времени вы-

 

полнения (run-time).

On Error Goto 0

Отключает пользовательский обработчик ошибок в данной

 

процедуре. Эта инструкция не указывает метку 0 в качестве

 

начала обработчика ошибки, даже если в процедуре дейст-

 

вительно имеется такая метка.

Пользовательские обработчики ошибок позволяют реагировать на ошибки во время работы пользователя, например, когда вместо числа пользователь вводит текстовое данное или вообще не вводит данное.

93

В приведённой ниже процедуре ПримерOnErrorGoto возникает ошибка ввода до тех пор, пока не будет введено число, управление передаётся на метку Ошибка, и инструкция 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

Resume

End Sub

При возникновении ошибки ввода выводится следующее диалоговое окно, сообщающее о несоответствии типа данного введённому значению (“Пусто” или “Не число”).