ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 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