группа_2]
End If
Здесь параметр условие - логическое выражение, принимающее значение «истинно» или «ложно». Если это выражение истинно, то выполняется совокупность операторов, отмеченная как группа_1. Если выражение ложно, то выполняются операторы, отмеченные как группа_2.
Пример 2. Дополнить пример 1 проверкой корректности введенного номера месяца. Для этого заменим последний оператор примера 1 (оператор МsgВох) следующей конструкцией:
IfintНомер <= 12 And intНомер > 0 Then
МsgВох « Выбран месяц: » » & strМесяцы ( intНомер-1)
Else
МsgВох « Указан не верный номер месяца: » & intНомер
End If
Вторая конструкция применяется для выполнения одной или нескольких групп инструкций в зависимости от значения условия.
Sе1ес1 Саsе выражение
Саsе значения_1
группа_1
[ Саsе значения_2
группа_2 ]
…………………….
[ Саsе Е1sе
группа_Е1sе ]
Еnd Sе1ес1
Здесь выражение — вычисляемое арифметическое или логическое выражение, в простейшем случае— переменная. Значения — одно или несколько значений вычисляемого выражения, а соответствующая ему группа — совокупность операторов, выполняемых в случае, если результат вычисления совпадает с этим значением.
Пример 3. Дополнить примеры 1 и 2 конструкцией, вычисляющей время года на основе введенного номера месяца.
Sе1есt Саsе intНомер
Саsе 3 То 5
strВремяГода = "весны"
Саsе 6 То 8
strВремяГода = "лета"
Саsе 9 То 11
strВремяГода = "осени"
Саsе Е1sе
strВремяГода = "зимы"
Еnd Sе1ес1:
МsgВох strМесяцы(IndНомер-1) & " - месяц " &strВремяГода
Эту конструкцию следует поместить вместо оператора МsgВох "Выбран месяц:" & strМесяцы(intНомер-1) (см. пример 2).
Конструкции для организации циклических процессов используются для многократного повторения одной или более операций.
Язык VВА включает несколько управляющих структур для выполнения циклов. Простейший синтаксис этих конструкций имеет вид:
Do While условие
Операторы
Lоор
Fог счетчик = начало То конец [Stер шаг] -
операторы
Next [счетчик]
Fог Еасh элемент In группа
операторы
Nехt: [элемент]
Для конструкции Dо ... Lоор параметр условие — логическое выражение, принимающее значение «истинно» или «ложно». До тех пор, пока это выражение истинно, выполняются операторы, расположенные до Lоор, в противном случае эти операторы пропускаются.
В конструкции Fог … Nехt параметр счетчик—имя вспомогательной переменной, которая изменяется с исходного значения начало до значения конец с шагом изменения шаг. При каждом изменении этой переменной выполняются инструкции, находящиеся между Fог и Nехt.
Конструкция Fог Еасh ... Nехt не требует подсчитывать число элементов или задавать условие окончания цикла. Здесь элемент — это переменная, представляющая элемент семейства, а группа — имя семейства или массива. Операторы выполняются для всех элементов этой группы.
Пример 4. Иллюстрация использования конструкций Dо ... Lоор и Foг ... Nехt для нахождения суммы чисел от 1 до 50 включительно и конструкции Fог Еасh ... Nехt для суммирования чисел, находящихся в массиве с именем «Налоги» (активного рабочего листа таблицы Ехсеl). В этом примере используется свойство Vа1uе объекта Сеll.
intЧисло = 1
intСумма = 0
Do While intЧисло<= 50
intСумма = intСумма + intЧисло
intЧисло = intЧисло + 1
Loop
intСумма = 0
For intЧисло = 1 To 50 step 1
IntСумма = intСумма + intЧисло
Next intЧисло
IntСумма = 0
For Each Cell In Range («Налоги»)
IntСумма = intCумма +Сell. Value
Next Cell
1.4. Основные сведения о процедурах
Процедура — это сгруппированный и логически законченный набор операторов VВА. Различают следующие типы процедур: процедуры-подпрограммы (процедуры Sub) и процедуры-функции (процедуры Function).
Процедура Sub— совокупность операторов VВА, заключенных между операторами Sub и Еnd Sub. Процедуры этого типа выполняют определенные действия, но значения в вызывающую их процедуру не возвращают. Имена таких процедур не могут быть использованы в выражениях и операторах присваивания. Как правило, процедуры - подпрограммы являются макросами или процедурами обработки событий (процедуры, автоматически выполняемые при возникновении события, инициируемого пользователем или приложением).
Синтаксис процедуры Sub имеет вид:
Sub имя ( [аргументы] )
операторы VВА
End Sub
Параметр имя определяет имя создаваемой процедуры. Параметры аргументы применяются при необходимости передачи в процедуру требуемых значений.
Процедура Function предназначена для получения вычисляемого значения посредством преобразования исходных данных. Как правило, функциями являются процедуры преобразования, которые используются в выражениях операторах присваивания и др. В отличие от подпрограмм, процедуры-функции выполняют определенную операцию и обязательно возвращают в вызывающую их процедуру вычисляемое значение.
Синтаксис процедуры-функции имеет вид:
Function имя ( [аргументы] ) [Аs тип]
Операторы VВА
имя = выражение
Еnd Function
Параметр имя определяет имя создаваемой процедуры. Необязательные параметры аргументы позволяют передать в процедуру требуемые значения. Параметр Аs тип задает тип данных, возвращаемых функцией. Инструкция имя = выражение используется для задания вычисленного и возвращаемого в вызывающую процедуру значения.
Процедуры Function и Sab могут быть либо закрытыми, либо открытыми. Открытую процедуру, объявленную с применением ключевого слова Public, разрешается вызывать из любой процедуры любого модуля. Закрытую процедуру, объявленную с помощью ключевого слова Private, можно вызывать только из процедур текущего модуля. Если в объявлении процедуры не указан ее вид, то по умолчанию она считается Public (то есть открытый).
Пример 5. Операторы процедуры ПервыйСимвол. Назначение процедуры — преобразование первого символа исходной строки strИсходнаяСтрока в прописной, а остальных символов строки в строчные.
1. Publiс Function ПервыйСимвол (strИсходнаяСтрока Аs
String)
2. Dim strСтрока As String
3. strСтрока = Trim (strИсходнаяСтрока)
ПервыйGимвол = Ucase (Left(strСтрока), 1)) &
Lcase (Mid (strСтрока, 2))
4. End Function
Здесь и далее нумерация 1,2,…, 5 дана с целью последующих комментариев операторов процедуры:
1. Задание открытой (Рublic) процедуры с именем ПервыйСимвол, возвращающей преобразованное значение (тип Function). Входным аргументом является строка strИсходнаяСтрoка, в которой требуется установить первую букву как прописную, а остальные — строчные.
2. Описание введенной вспомогательной переменной — строки strСтрока. Эту строку планируется использовать для временного хранения информации.
3. Определение содержимого переменной strСтрока как значение строки strИсходнаяСтрока, в начале и конце которой удалены пробелы с помощью встроенной в Ехсеl функции Trim().
4. Установка первого (левого) символа содержимого строки strСтрока как прописного (применяется встроенная функция UСаsе) и перевод остальных символов строки в строчные (встроенная функция LСаsе). Оператор & (логическое «и») используется для слияния (объединения) двух подстрок в одну. Результат записывается в строку ПервыйСимвол, то есть в имя функции — для передачи в вызывающую программу.
5. Окончание процедуры.
Пример 6. Создать процедуру обработки события Нажатие (Click) для помещенной в поле рабочего листа кнопки Преобразовать. Преобразование заключается в вызове для содержимого предварительно выделенного диапазона ячеек рабочего листа Ехсеl процедуры ПервыйСимвол (пример 5), подсчете числа сделанных с помощью этой процедуры преобразований и выделении курсивом не измененных процедурой значений.
В рассматриваемом примере используются понятия объекта Selection,- свойств Value и Font.Italic,Cell и события Click.
1. Private Sub Преобразовать_Click ( )
2. Dim intЧислоЗамен As Integer
intЧислоЗамен = 0
3. For Each Cell In Selection
If Cell.Value <> Первый символ (Cell.Value) Then
Cell.Value = Первый символ (Cell.Value)
intЧислоЗамен = intЧислоЗамен +1
Else
Cell.Fon.Italic = True
End If
Next Cell
7.MsgBox «Сделано» & intЧислоЗамен & «преобразований»
End Sub
Комментарии:
1. Задание процедуры, обрабатывающей событие Нажатие(Click), возникающее при нажатии кнопки с именем Преобразовать. Процедура не возвращает никакого значения (Sub), доступна только в данном модуле (Private) и не имеет входных аргументов.
2. Описание введенной переменной — intЧислоЗамен. Содержимое этой переменной— число преобразованных функцией ПервыйСимвол ячеек. Изначально содержимое переменной intЧислоЗамен равно 0.
3. Организуется последовательный перебор всех ячеек предварительно выделенного диапазона, рабочего листа таблицы Ехсеl, определяемого объектом Selection.
4. Осуществляется проверка неравенства исходного значения текущей ячейки диапазона и значения этой же ячейки, преобразованного функцией ПервыйСимвол. В случае неравенства выполняется группа операторов 5, а в случае равенства — 6.
5. Строка преобразуется путем вызова для содержимого текущей ячейки рабочего листа таблицы Ехсеl процедуры ПервыйСимвол; содержимое переменной intЧислоЗамен (счетчика выполненных преобразований) увеличивается на 1.
6. Содержимое текущей ячейки выделяется курсивом.
7. Вывод сообщения о числе преобразованных ячеек.
Данные, необходимые процедуре типа Sub или Function для выполнения ее задачи (в примере 5. переменная strИсходнаяСтрока), передаются как аргументы. Аргументы отделяются друг от друга запятыми. Объявляя аргумент с помощью ключевого слова Аs, можно задать тип исходных данных.
Процедуре можно запретить изменение значения переданного ей аргумента, для чего используется ключевое слово ByVal. Если же процедуре разрешено изменять значение аргумента, то может применяться ключевое слово ВуRef. По умолчанию применяется именно этот способ передачи аргумента.
Для определения обязательности аргумента используется ключевое слово Optional.