logo
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 3

Вывод сообщений. Функция 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

1

OK

vbCancel

2

Cancel

vbAbort

3

Abort

vbRetry

4

Retry

vbIgnore

5

Ignore

vbYes

6

Yes

vbNo

7

No

Если в окне есть кнопка Cancel, нажатие клавиши Esc завершает работу в окне и возвращается тот же код vbCancel, что и при выборе кнопки Cancel.

В следующем примере создается окно с сообщением об ошибке и вопросом о продолжении вычисления. В нем пиктограмма важного сообщения и кнопки Yes и No, причем вторая - кнопка, выбираемая по умолчанию. Файл со справкой называется ERRORS.HLP, а номер контекстной справки в этом файле равен 200.

Public Sub Mes2()

Dim Msg As String, MyString As String

Dim Btns As Integer

Dim Title As String, Help As String

Dim NmbCont As Integer, Result As Integer

Title = " Вы ввели неверные данные !" ' заголовок окна.

Msg = "Будем продолжать работу ?" ' сообщение.

Btns = vbYesNo + vbCritical + vbDefaultButton2 ' кнопки и свойства

Help = "ERRORS.HLP" ' имя файла со справкой

NmbCont = 200 ' номер темы

' Вывод сообщения.

Result = MsgBox(Msg, Btns, Title, Help, NmbCont)

If Result = vbYes Then ' пользователь нажал кнопку Yes.

MyString = "Да" ' действия по продолжению работы

'...

Else ' пользователь нажал кнопку No.

MyString = "Нет" ' действия по прекращению работы

'...

End If

End Sub

Пример 12.1. (html, txt)

При этом вызове на экране появится окно:

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