Основы офисного программирования и язык VBA

         

Вывод сообщений. Функция MsgBox


Рассмотрим сейчас встроенные диалоговые окна, которые появляются при вызове некоторых функций VBA. И начнем наше рассмотрение с функции MsgBox, предназначенной для вывода сообщений. Диалоговое окно, создаваемое функцией MsgBox, служит для вывода на экран сообщения программы и получения от пользователя простой реакции на это сообщение в виде щелчка одной из кнопок окна. В простейшем случае эта функция вызывается как процедура. Например, вызов:

MsgBox "Сегодня на календаре" & Date

выведет окно:


Рис. 12.3.  Пример окна сообщений

После щелчка кнопки OK вызов функции завершится, и выполнение программы возобновится с оператора, стоящего непосредственно за этим вызовом.

Диалоговое окно, выводимое функцией MsgBox, можно обогатить несколькими кнопками, чтобы пользователь мог указать с их помощью направление дальнейшего вычисления, а также присоединить к нему контекстную справку. В общем случае вызов MsgBox имеет вид:

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

Здесь параметр prompt (сообщение) - строковое выражение, значение которого выводится в окне. Его максимальная длина не должна превышать 1024 символов. Разбиение на строки в этом выражении можно производить, используя символ возврата каретки (Chr(13)), символ перевода строки (Chr(10)), их комбинацию (Chr(13) & Chr(10)) или константу vbCrLf. Числовой параметр buttons (кнопки) задает виды командных кнопок, помещаемых в окне, кнопку, выбираемую по умолчанию, и модальность диалогового окна. Он получается как сумма кодов соответствующих кнопок и свойств. Явно не заданный, этот параметр считается равным 0. Строковое выражение title (заголовок) задает заголовок окна. Если его нет, заголовком становится имя приложения (см. пример, приведенный выше, где мы использовали Word). Параметры helpfile (файл справки) и context (контекст) должны присутствовать (или отсутствовать) вместе. Первый из них - имя файла, содержащего справку, которая будет выведена при нажатии клавиши F1, а второй - числовое выражение, задающее номер темы со справкой в этом файле.


Вот коды кнопок и других свойств окна функции MsgBox:
Имя константыКодОписание
Коды наборов командных кнопок
vbOKOnly 0только кнопка OK (Готово)
VbOKCancel 1кнопки OK и Cancel (Отказ)
VbAbortRetryIgnore 2кнопки Abort (Прервать), Retry (Продолжить) и Ignore (Игнорировать)
VbYesNoCancel 3кнопки Yes (Да), No (Нет) и Cancel
VbYesNo 4кнопки Yes и No
VbRetryCancel 5кнопки Retry и Cancel
Коды пиктограмм
VbCritical 16важное сообщение (крестик в круге)
VbQuestion 32запрос (вопросительный знак)
VbExclamation 48предупреждение (восклицательный знак)
VbInformation 64информационное сообщение (i в круге)
Кнопка, выбранная по умолчанию
VbDefaultButton1 0первая кнопка
VbDefaultButton2 256вторая кнопка
VbDefaultButton3 512третья кнопка
VbDefaultButton4 768четвертая кнопка
Модальность диалога
VbApplicationModal 0модален относительно приложения
VbSystemModal 4096модален относительно системы

Диалоговое окно модально относительно приложения, если для продолжения работы в текущем приложении пользователь должен закончить работу в этом окне (ответить на сообщение). Модальность относительно системы означает, что все приложения будут приостановлены до завершения работы в данном окне.
Может показаться странным, что константа VbDefaultButton4 указывает на четвертую кнопку, хотя максимальное количество кнопок, определяемых кодами от 0 до 5, - три. Дело в том, что некоторые приложения (например, Excel) при наличии параметров справка и контекст могут автоматически добавить в окно кнопку справки Help, вызывающую окно справки.
Результирующее значение параметра buttons получается как сумма кодов по одному из каждой группы. Например, значение 36 = 4 + 32 = VbYesNo + VbQuestion означает, что в окне будет пиктограмма с вопросительным знаком и две кнопки Yes и No, причем первая из них будет считаться выбранной, если пользователь ее щелкнет или нажмет клавишу Enter.
Как узнать, какую кнопку выбрал пользователь? Присвоить значение функции MsgBox некоторой целочисленной переменной и проверить его.


Возвращаемые MsgBox значения приведены в таблице:
Имя константыЗначениеНажатая кнопка
vbOK 1OK
vbCancel 2Cancel
vbAbort 3Abort
vbRetry 4Retry
vbIgnore 5Ignore
vbYes 6Yes
vbNo 7No

Если в окне есть кнопка Cancel, нажатие клавиши Esc завершает работу в окне и возвращается тот же код vbCancel, что и при выборе кнопки Cancel.
В следующем примере создается окно с сообщением об ошибке и вопросом о продолжении вычисления. В нем пиктограмма важного сообщения и кнопки Yes и No, причем вторая - кнопка, выбираемая по умолчанию. Файл со справкой называется ERRORS.HLP, а номер контекстной справки в этом файле равен 200.
Пример 12.1.
(html, txt)
При этом вызове на экране появится окно:

Рис. 12.4.  Сообщение о неверных данных

Содержание раздела