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

86

s=" "

For Each ЛИСТ In ActiveWorkbook.Worksheets s = s & " " & Item.Name

Next ЛИСТ

MsgBox "Рабочие Листы:" & vbCrLf & s End Sub

При выполнении этой процедуры функция MsgBox отображает строку, состоящую из свойств Name (Имя листа) каждого рабочего листа:

2.12.4. Инструкции перехода

Инструкции перехода часто используются в языках программирования. В них проверяется соответствие каким-то условиям и в зависимости от этого выполнение программы направляется по одной или другой ветви, или осуществляется безусловный переход в определённое место программы. В VBA предусмотрено две инструкции условного перехода:

If… Then... Else

Select Case

и инструкция безусловного перехода GoTo. К этой группе инструкций также относятся:

инструкции On Error GoTo метка, On Error Resume Next и On Error GoTo 0, служащие для перехода к обработчику ошибок;

инструкция Resume, возобновляющая выполнение процедуры после того, как заканчивает работу процедура обработки ошибок;

инструкция GoSub…Return, которая передаёт и возвращает управление выполнением процедуры подпрограмме внутри процедуры;

инструкции On…GoSub и On…GoTo, предназначенные для передачи управления выполнением программы на одну из нескольких определённых строк программы в зависимости от значения некоторого параметра;

инструкции Exit Do, Exit For, Exit Function и Exit Sub, используемые для прерывания выполнения блока Do…Loop, For…Next, Function и Sub.

2.12.4.1. Инструкция условного перехода If…Then…Else

Инструкция If...Then...Else задает выполнение определенных групп инструкций в зависимости от значения выражения. Она может иметь однострочный и два блоковых формата.

87

Однострочный формат:

If условие Then инструкции

Первый блоковый формат:

If условие Then [инструкции] [Else инструкции] [Else

[инструкции_Else]]

End If

Второй блоковый формат: If условие Then

[инструкции] [ElseIf условие Then

[инструкции_elseIf]]… [Else

[инструкции_else]]

End If

При этом ElseIf …Тhen может повторяться несколько раз.

В основу этой инструкции положен следующий принцип: если условие выполняется, то выполняются инструкция, находящиеся после Then.

Формат инструкции If...Then...Else содержит следующие элементы:

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

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

Условие

Обязательный. Одно или более выражений следующих двух

 

типов: численное или строковое выражение, которое приво-

 

дится к значениям True или False.

Инструкции

Необязательный в блочной форме, но обязательный в од-

 

нострочной форме, которая не имеет ветви Else. Один или

 

несколько операторов; выполняются, если Условие имеет

 

значение True.

Однострочная форма допускает выполнение нескольких инструкций в результате проверки одного условия If…Then. При этом все инструкции должны находиться на одной строке и разделяться двоеточием, как показано в приведенном ниже примере:

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

88

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 применяется в следующих случаях:

1. Нужно проверить на соответствие одному или нескольким условиям и в случае соответствия сделать какое-то действие:

Option Compare Text

––––––––––––––––––––––––––––––––––––––––––––––––––

Sub IfThenElse2() Dim КурсРаб As String

If Range("a5").Value = "Неуд" Or Range("a5").Value = "" Then MsgBox "Небходимо защитить курсовую работу "

End If

End Sub

2.Нужно проверить на соответствие одному или нескольким условиям и в случае соответствия сделать какое-то действие, а в случае несоответствия выполнить другое действие:

Sub IfThenElse3() Dim КурсРаб As String

If Range("a5").Value = "Неуд" Or Range("a5").Value = "" Then MsgBox "Необходимо защитить курсовую работу"

Else

MsgBox "К экзамену по информатике допущен" End If

End Sub

Примечание

На уровне стандартного модуля, в котором находится процедура IfThenElse2, помещена инструкция Option Compare Text. Инструкция Option Compare применяется на уровне модуля перед первой процедурой модуля для задания используемого по умолчанию способа сравнения строковых данных.

Формат инструкции:

Option Compare Binary | Text | Database

Инструкция Option Compare указывает способ сравнения строк Binary, Text или Database для модуля. Если модуль не содержит инструк-

89

цию 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 используется для задания метода сравнения строковых данных, используемого по умолчанию.

Option compare Binary ' т.е. "AAA" < "aaa"

' Устанавливает метод сравнения строковых данных Binary. Option compare Text ' т. е. "AAA" = "aaa".

' Устанавливает метод сравнения строковых данных Text.

Для Option Compare Text буквы верхнего регистра эквивалентны буквам нижнего регистра, например, тексты Отлично и отлично не различаются.

Option Compare Database можно использовать только в MS Access.

3.В случае, если первая проверка вернула 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... Else:

ключевое слово Then должно находиться в одной строке с If и условием. Если вы перенесете его на следующую строку, будет выдано сообщение об ошибке;

если разместить команду, которую нужно выполнить при истинности проверяемого условия на одной строке с If и Then, то End If можно не писать: