Лабораторная работа №3 Операторы (инструкции) перехода
Цель: научиться использовать в программном коде операторы условного и безусловного перехода, а также обработчик ошибок.
Литература: при подготовке к лабораторной работе рекомендуется изучить ХХХ главу учебного пособия «Программирование на VBA в MS Excel 2013».
Инструкции перехода относятся к управляющим конструкциям VBA, которые включают операторы ветвления (условного перехода), цикла и безусловного перехода.
Ветвление организуется с использованием двух операторов условного перехода: If... Then... Else и Select Case. В них проверяется соответствие каким-то условиям и в зависимости от этого выполнение программы направляется по одной или другой ветви. Оператор Select Case называется оператором выбора или оператором вариантаДля осуществления безусловного перехода в определённое место программы в VBA предусмотрена инструкция безусловного перехода GoTo. Обработчик ошибок делает доступным инструкция перехода к обработчику ошибок On Error.
Операторы перехода по условию
Оператор условного перехода If…Then…Else
Оператор If...Then...Else задает выполнение определенных действий в зависимости от значения выражения условие. Он может иметь строчный и блочный формат записи.
Строчный формат:
If условие Then [операторы_1] [Else операторы_2]
Блочный формат:
If условие Then
[операторы_1]
[ElseIf условие Then
[операторы_2]]
[ElseIf условие Then
[операторы_3]]
. . .
[ElseIf условие Then
[операторы_N]]
[Else
[операторы_N+1]]
End If
Здесь условие может быть как логическим, так и математическим выражением. Если значение выражения равно 0, то оно трактуется как false, все другие значения – true.
В основу этих операторов положен следующий принцип: если условие равно true, то выполняются операторы, находящиеся после Then. Если в строчной форме отсутствует необязательная ветвь Else, то операторы _1 не могут быть опущены, наличие хотя бы одного из них обязательно. В строчной форме все операторы должны находиться на одной строке и разделяться двоеточием, как показано в приведенном ниже примере:
Sub IfThenElse()
Dim a As Single
Dim b As Single
Dim c As Single
a = Range("A1").Value
b = Range("A2").Value
If b=0 Then MsgBox "Деление невозможно!" Else c=a/b : _
MsgBox "c="&c
End Sub
Пример блочной формы:
Sub IfThenElse1()
Dim a As Single
Dim b As Single
Dim c As Single
a = Range("A1").Value
b = Range("A2").Value
If b=0 Then
MsgBox "Деление на ноль невозможно!"
Else
c = a / b
MsgBox "c=" & c
End If
End Sub
Некоторые замечания по использованию блочной формы If…Then... Else.
Ключевое слово Then должно находиться в одной строке с If и условием. Если вы перенесете его на следующую строку, будет выдано сообщение об ошибке.
Наличие End If обязательно, его отсутствие вызовет появление синтаксической ошибки.
Рекомендуется использовать отступы для выделения блоков команд, иначе трудно будет читать код.
Инструкция If...Then...Else применяется в следующих случаях:
Нужно проверить на соответствие одному или нескольким условиям и в случае соответствия сделать какое-то действие:
Sub IfThenElse2()
Dim КурсРаб As String
If Range("A5").Value = "Неуд" Or Range("A5").Value = "" Then
MsgBox "Небходимо защитить курсовую работу"
End If
End Sub
Нужно проверить на соответствие одному или нескольким условиям и в случае соответствия сделать какое-то действие, а в случае несоответствия выполнить другое действие:
Option Compare Text
––––––––––––––––––––––––––––––––––––––––––––––––––
Sub IfThenElse3()
Dim КурсРаб As String
If Range("a5").Value = "Неуд" Or Range("a5").Value = "" Then
MsgBox "Необходимо защитить курсовую работу"
Else
MsgBox "К экзамену по информатике допущен"
End If
End Sub
Примечание
На уровне стандартного модуля, в котором находится процедура IfThenElse3, помещена инструкция Option Compare Text. Инструкция Option Compare является директивой препроцессора и применяется на уровне модуля перед первой процедурой модуля для задания используемого по умолчанию способа сравнения строковых данных.
Формат инструкции:
Option Compare {Binary | Text | Database}
Инструкция Option Compare указывает способ сравнения строк Binary, Text или Database для модуля. Если модуль не содержит инструкцию Option Compare, то по умолчанию используется способ сравнения Binary. Инструкция Option Compare Binary задает сравнение строк на основе порядка сортировки, определяемого внутренним двоичным представлением символов. В Microsoft Windows порядок сортировки определяется кодовой страницей символов. В следующем примере представлен типичный результат двоичного порядка сортировки:
A < B < E < Z < a < b < e < z < Б < Л < Ш < б < л < ш
Инструкция Option Compare Text задает сравнение строк без учета регистра символов на основе системной национальной настройки. Тем же символам, что и выше, при сортировке с инструкцией Option Compare Text соответствует следующий порядок:
(A=a) < (B=b) < (E=e) < (Z=z) < (Б=б) < (Л=л) < (Ш=ш)
Инструкция Option Compare Database может использоваться только в Microsoft Access.
Использование Option Compare Text в модуле, в который включена процедура IfThenElse3, делает безразличным как записана информация в ячейку A5 – "Неуд", "неуд", "НЕУД", "Неуд", "НЕуд" и т.д.
В процедуре IfThenElse2 используется по умолчанию Option Compare Binary и, если ячейка A5 будет не пустой и будет содержать что-то, отличное от "Неуд", например, "неуд", то результатом проверки условия будет False и сообщения "Необходимо защитить курсовую работу" не будет.
В случае если первая проверка условия вернула False, но нужно проверить на соответствие еще нескольким условиям, удобно использовать ElseIf.
Пример:
Sub IfThenElse4()
If Range("a6").Value >= 0.84 Then
MsgBox "Ваша оценка " & """Отлично"""
ElseIf Range("A6") < 0.84 And Range("A6") >= 0.67 Then
MsgBox "Ваша оценка ""Хорошо"""
ElseIf Range("A6") < 0.67 And Range("A6") > 0.5 Then
MsgBox "Ваша оценка ""Удовлетворительно"""
Else
MsgBox "Ваша оценка ""Неудовлетворительно"""
End If
End Sub
Операторы If…Then можно вкладывать друг в друга. Процедуру IfThenElse4 можно переписать в другом виде, используя вложение операторов If…Then:
Sub IfThenElse5()
If Range("a6").Value >= 0.84 Then
MsgBox "Ваша оценка " & """Отлично"""
Else
If Range("A6") < 0.84 And Range("A6") >= 0.67 Then
MsgBox "Ваша оценка " & """Хорошо""""
Else
If Range("A6") < 0.67 And Range("A6") > 0.5 Then
MsgBox "Ваша оценка " & """Удовлетворительно"""
Else
MsgBox "Ваша оценка " & """Неудовлетворительно"""
End If
End If
EndIf
End Sub
