ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 19.06.2025
Просмотров: 1430
Скачиваний: 3
Expressionl, Expression2, …, ЕxpressionN
Выражения в ExpressionList могут быть любыми численными, строковыми или логическими выражениями. Выражение в ExpressionList может также определять диапазон значений при использовании оператора То:
Expression1 To Expression2
Для выбора ветвей на основе сравнения, является ли TestExpression больше, меньше или равным какому-либо значению, или на основе какого-либо другого реляционного сравнения, используйте следующий синтаксис:
Is ComparisonOperator expression
Задание 4. Напишите процедуру, содержащую вложенные операторы
If…Then…Else.
Для этого:
ü введите процедуру (листинг 12):
Листинг 12 – Использование оператора Select…Case
1Sub List4_12 ()
2' Определение скидки (в %) в зависимости от
3' количества продаваемого товара
4Dim IStr As String
5Dim IntNum As Variant
6 |
|
7 |
IntNum = Application.InputBox( _ |
8 |
Prompt:="Введите количество товара", _ |
9 |
Title:="Исходные данные", Type:=1) |
10If Not (TypeName(IntNum) = "Boolean") Then
11Select Case IntNum
12 |
Case Is > 1000 |
13 |
IStr = "10" |
14 |
Case Is > 500 |
15 |
IStr = "5" |
16 |
Case Else |
17 |
IStr = "0" |
18End Select
19MsgBox "Скидка " & IStr & "%"
20Else
21MsgBox "Количество не указано"
22End If
23End Sub
Безусловный переход
Оператор безусловного перехода, пожалуй, самый спорный оператор во всех языках программирования. В ранних языках он являлся почти единственным средством организации циклических выполнений блоков кода. Сторонники
структурного программирования посвящают много времени критике программ и
74
языков программирования, в которых используется этот оператор. Поэтому не
очень увлекайтесь применением этого оператора в своем коде и старайтесь вспоминать о нем только в чрезвычайных ситуациях, когда все другие средства уже испробованы и не помогли.
Оператор безусловного перехода всегда изменяет порядок выполнения операторов в процедуре или функции VBA. При этом VBA не проверяет никаких условий (отсюда термин безусловный (unconditional)), а просто переходит к выполнению кода с другого места.
VBA имеет только один оператор безусловного перехода: GoTo. Оператор GoTo имеет следующий синтаксис:
GoTo Name
выражение Name представляет любую допустимую метку или номер строки в той же процедуре или функции, которая содержит оператор GoTo. При выполнении оператора GoTo VBA немедленно переходит к выполнению оператора в строке, определенной с помощью Name. Метка строки (line label) – это особый тип идентификатора, который задает определенную строку по имени. Метки строк имеют следующий синтаксис:
Name:
выражение Name – любой допустимый идентификатор VBA. Метка строки может начинаться в любом столбце в строке, если она является первым непустым символом в строке. Номер строки (line number) – в основном, то же самое, что и метка строки, но он является просто номером, а не идентификатором. Использование номеров строк в процедурах VBA является крайне нежелательным, следует всегда использовать метку строки вместо них.
Использование MsgBox для обеспечения возможности выбора
До сих пор вы использовали оператор MsgBox с целью отображения сообщений для пользователя в диалоговых окнах с заголовками. Как уже отмечалось в частях 2 и 3, при помощи необязательного аргумента Buttons можно использовать VBA-процедуру MsgBox как функцию для получения выбора от пользователя в ответ на сообщения или вопросы, которые отображает ваша процедура. Для многих простых вариантов выбора использование функции MsgBox для получения ответа от пользователя является гораздо более легким,
чем получение текстового ввода с помощью функции InputBox и последующий анализ этого текста для определения того, какой выбор сделал пользователь.
При включении аргумента Buttons с необходимыми круглыми скобками оператор MsgBox работает подобно функции и отображает окно сообщения, содержащее различные командные кнопки. Число и тип командных кнопок, отображаемых диалоговым окном MsgBox, задается с помощью аргумента Buttons. Buttons указывает также кнопку по умолчанию в диалоговом окне и, содержит ли это диалоговое окно стандартные значки Windows: Critical, Information, Exclamation или Question для предупредительных сообщений и запросов пользователя (табл. 20). MsgBox возвращает численный результат, указывающий, какую командную кнопку выбрал пользователь (табл. 21).
75
Таблица 20 – Аргументы-константы функции MsgBox
Константа |
Назначение |
|||||||
(числовое значение) |
||||||||
vbOKOnly |
Отображает только кнопку OK; то же самое происходит при |
|||||||
(0) |
опускании аргумента Buttons |
|||||||
vbOKCancel (1) |
Отображает кнопки OK и Отмена (OK, Cancel) |
|||||||
vbAbortRetryIgnore |
Отображает командные кнопки Стоп, Повтор, Пропустить |
|||||||
(2) |
(Abort, Retry, Ignore) |
|||||||
vbYesNoCancel (3) |
Отображает кнопки Да, Нет и Отмена (Yes, No, Cancel) |
|||||||
vbYesNo (4) |
Отображает кнопки Да и Нет (Yes, No) |
|||||||
vbRetryCancel (5) |
Отображает кнопки Повтор и Отмена (Retry, Cancel) |
|||||||
vbCritical |
Отображает |
в |
диалоге |
значок |
критического |
|||
(16) |
предупредительного сообщения (Critical Message) Windows |
|||||||
(красный кружок) |
||||||||
vbQuestion |
Отображает значок запроса (Query icon) Windows ("?"); |
|||||||
(32) |
обычно используется, чтобы задать пользователю очень |
|||||||
важный вопрос или выдать предупредительное сообщение, |
||||||||
требующее ответа |
||||||||
vbExclamation |
Отображает значок ("!") предупреждения (Warning |
|||||||
(48) |
Message); обычно используется для отображения важной |
|||||||
информации или предупреждения, не требующего ответа |
||||||||
vbInformation |
Отображает значок ("i") информации (Information Message); |
|||||||
(64) |
обычно используется для отображения важной информации, |
|||||||
кроме предупреждения |
||||||||
vbDefaultButton1 |
Первая командная кнопка в диалоговом окне является |
|||||||
(0) |
кнопкой по умолчанию |
|||||||
vbDefaultButton2 |
Вторая командная кнопка в диалоговом окне является |
|||||||
(256) |
кнопкой по умолчанию |
|||||||
vbDefaultButton3 |
Третья командная кнопка в диалоговом окне является |
|||||||
(512) |
кнопкой по умолчанию |
|||||||
vbDefaultButton4 |
Четвертая командная кнопка в диалоговом окне является |
|||||||
(768) |
кнопкой по умолчанию |
|||||||
Таблица 21 – Возвращаемые значения-константы функции MsgBox |
||||||||
Константа |
Значение |
Означает, что пользователь выбирает кнопку |
||||||
vbOK |
1 |
OK |
||||||
vbCancel |
2 |
Отмена (Cancel) |
||||||
vbAbort |
3 |
Стоп (Abort) |
||||||
vbRetry |
4 |
Повтор (Retry) |
||||||
vbIgnore |
5 |
Пропустить (Ignore) |
||||||
vbYes |
6 |
Да (Yes) |
||||||
vbNo |
7 |
Нет (No) |
||||||
Задание 4. Напишите процедуру, демонстрирующую использования аргумента Buttons функции MsgBox.
76
Для этого:
ü введите процедуру (листинг 13):
Листинг 13 – Использование MsgBox и аргумента Buttons
1Sub List4_13 ()
2' Процедура демонстрирует MsgBox, используемую как функция
3Const mTitle = "Демонстрация кнопок MsgBox"
4Dim Resp As Integer
5 |
|
6 |
Resp = MsgBox(Prompt:="Выберите кнопку", _ |
7 |
Title:=mTitle, _ |
8 |
Buttons:=vbYesNoCancel + vbQuestion) |
9Select Case Resp
10Case Is = vbYes
11 |
MsgBox Prompt:="Вы выбрали кнопку 'Да'", _ |
12 |
Title:=mTitle, _ |
13 |
Buttons:=vbInformation |
14 |
Case Is = vbNo |
15 |
MsgBox prompt:="Вы выбрали кнопку 'Нет'", _ |
16 |
Title:=mTitle, _ |
17 |
Buttons:=vbInformation |
18 |
Case Is = vbCancel |
19 |
MsgBox prompt:="Вы выбрали кнопку 'Отмена'", _ |
20 |
Title:=mTitle, _ |
21 |
Buttons:=vbCritical |
22End Select
23End Sub
Процедура List4_13 () демонстрирует использование оператора MsgBox как функции, результаты различных аргументов Buttons и оценку значения, которое возвращает функция MsgBox. Диалоговое окно, в котором пользователю необходимо сделать выбор, представлено на рис. 19.
Рис. 19 Результаты работы кода этой процедуры при всех трех (по отдельности,
конечно) выборах представлены на рис. 20.
Рис. 20
77
Как только пользователь выбирает командную кнопку в окне сообщения, VBA возвращает численное значение, соответствующее выбору пользователя. В строке 6 результат функции MsgBox присваивается переменной Resp. VBA использует различные значения в зависимости от того, какую командную кнопку выбрал пользователь: одно значение для обозначения кнопки Да, другое – для обозначения кнопки Нет и еще одно – для кнопки Отмена. В строке 9 начинается оператор Select Case, который оценивает значение, возвращаемое функцией MsgBox в строке 6 и сохраняемое в переменной Resp. Тестовое выражение для оператора Select Case – это сама переменная Resp, поэтому VBA сравнивает значение в переменной Resp, чтобы проверить, совпадает ли оно с каким-либо условием Case в операторе Select Case.
Использование оператора Exit
Для того чтобы процедура прекратила выполнение, используется форма VBA-оператора Exit.
Оператор Exit имеет следующий синтаксис:
Exit Sub
Exit Sub используется для окончания процедуры.
Использование оператора End
Одним из хороших принципов программирования является принцип модульности. Процедура не должна содержать бесконечно длинный код, части которого выполняют совершенно не связанные между собой задачи. Следует помещать в каждую процедуру небольшой и функционально законченный код, который легко читать и сопровождать. Например, хорошо понимается код со следующей структурой:
Sub ГлавнаяПроцедура()
Call Процедура1 'Вызов процедуры Процедура1
Call Процедура2 'Вызов процедуры Процедура2
End Sub
Sub Процедура1()
'Код процедуры
End Sub
Sub Процедура2()
'Код процедуры
End Sub
Обратите внимание на то, что в этих фрагментах кода процедуры не возвращают никаких результатов свой работы. Это может быть только в случае, когда эти процедуры по очереди обрабатывают какие-то общие данные, выполняя над ними определенные действия. Результатами этих действий могут быть либо сами преобразованные данные, либо новые (и тоже общие) данные.
Контрольные вопросы
1. Что такое условный и безусловный переход?
78