Встроенные диалоговые окна

Диалоговые окна предназначены для информирования пользователя, а также для получения данных от пользователя. В большинстве случаев диалоговые окна являются модальными (т. е. блокирующими все окна приложения или только родительское окно) и отображаются на непродолжительный промежуток времени. Язык VBA позволяет использовать как встроенные диалоговые окна, так и окна, создаваемые программистом. В этом разделе мы рассмотрим встроенные диалоговые окна, которые позволят выводить сообщения и получать данные от пользователя. Создание пользовательских диалоговых окон мы рассмотрим в отдельной главе.

Диалоговое окно для вывода сообщения

Для вывода сообщений предназначена функция MsgBox(). Форматы функции:

<Результат> = MsgBox(<Сообщение>[, <Кнопки>[, <Заголовок>
                    [, <Файл справки>, <Контекст>]]])
MsgBox <Сообщение>[, <Кнопки>[, <Заголовок>
       [, <Файл справки>, <Контекст>]]]

В параметре <Сообщение> указывается текст сообщения. Если необходимо вывести сообщение на нескольких строках, то следует дополнительно указать последовательность символов \r\n (перевод каретки и перевод строки). Вставить эту последовательность символов позволяет функция Chr(<Код символа>). Символ \r имеет код 13, а символ \n — код 10. Используя символ конкатенации строк & можно объединить эти символы в последовательность. Пример вывода сообщений:

MsgBox "Текст сообщения" ' Выведет: Текст сообщения
' Вывод сообщения на нескольких строках
MsgBox "Строка 1" & Chr(13) & Chr(10) & "Строка 2"
' Можно использовать только символ \r
MsgBox "Строка 1" & Chr(13) & "Строка 2"

Вместо функции Chr() можно использовать специальные константы:

Пример вывода сообщений на двух строках:

MsgBox "Строка 1" & vbCrLf & "Строка 2"
MsgBox "Строка 1" & vbNewLine & "Строка 2"

Необязательный параметр <Кнопки> указывает какие кнопки должны отображаться в диалоговом окне, задает стиль иконки и др. свойства окна. В качестве значения можно указать следующие константы (или их комбинацию):

MsgBox "Программа выполнила недопустимую ошибку", _
       vbOKOnly + vbCritical
MsgBox "Вы действительно хотите выполнить действие?", _
       vbYesNoCancel + vbQuestion
MsgBox "Действие может быть опасным. Продолжить?", _
       vbYesNoCancel + vbExclamation
MsgBox "Текст сообщения", vbOKOnly + vbInformation
MsgBox "Текст сообщения", _
       vbYesNoCancel + vbInformation + vbDefaultButton1
MsgBox "Текст сообщения", _
       vbYesNoCancel + vbInformation + vbDefaultButton2
MsgBox "Текст сообщения", _
       vbYesNoCancel + vbInformation + vbDefaultButton3
MsgBox "Текст сообщения", vbYesNoCancel + vbInformation _
       + vbDefaultButton3 + vbApplicationModal
MsgBox "Текст сообщения", vbYesNoCancel + vbInformation _
       + vbDefaultButton3 + vbSystemModal
MsgBox "Текст сообщения", vbYesNoCancel + vbInformation _
       + vbDefaultButton3 + vbApplicationModal _
       + vbMsgBoxHelpButton
MsgBox "Текст сообщения", vbYesNoCancel + vbInformation _
       + vbMsgBoxRight

Как видно из примеров, все константы делятся на несколько групп. Первая группа указывает какие кнопки отображаются в окне, вторая группа задает вид иконки, третья группа устанавливает кнопку по умолчанию, четвертая группа управляет модальностью окна. Константы из разных групп можно комбинировать между собой, указывая их через оператор +. Для примера выведем модальное окно с критическим сообщением, которое имеет содержит кнопки Да, Нет, Отмена и Справка, причем по умолчанию будет выбрана кнопка Отмена:

MsgBox "Текст сообщения", vbYesNoCancel + vbCritical _
       + vbDefaultButton3 + vbApplicationModal _
       + vbMsgBoxHelpButton

Параметр <Заголовок> в функции MsgBox() задает текст, который будет отображен в заголовке окна. Если параметр не указан, то выводится имя приложения. Пример:

MsgBox "Текст сообщения", vbOKOnly, "Текст заголовка"

Необязательный параметр <Файл справки> задает имя справочного файла, а параметр <Контекст> — номер раздела в справочном файле. Эти параметры должны указываться одновременно.

После вывода окна пользователь должен нажать одну из кнопок. Благодаря тому, что функция MsgBox() возвращает значение, внутри программы можно определить какую именно кнопку нажал пользователь. Функция возвращает одно из следующих значений:

Для примера выполним проверку двумя способами. Первый способ заключается в использовании оператора ветвления If (листинг 1.6), а второй способ — в использовании оператора выбора Select (листинг 1.7).

Листинг 1.6. Проверка нажатой кнопки с помощью оператора If

Dim Результат
Результат = MsgBox("Текст сообщения", _
                   vbYesNoCancel + vbQuestion, _
                   "Текст заголовка")
If Результат = vbYes Then
   Debug.Print "Нажата кнопка Да"
ElseIf Результат = vbNo Then
   Debug.Print "Нажата кнопка Нет"
ElseIf Результат = vbCancel Then
   Debug.Print "Нажата кнопка Отмена"
Else
   Debug.Print "Не смогли определить"
End If

Листинг 1.7. Проверка нажатой кнопки с помощью оператора Select

Dim Результат
Результат = MsgBox("Текст сообщения", _
                   vbAbortRetryIgnore + vbCritical, _
                   "Текст заголовка")
Select Case Результат
   Case vbAbort
      Debug.Print "Нажата кнопка Прервать"
   Case vbRetry
      Debug.Print "Нажата кнопка Повтор"
   Case vbIgnore
      Debug.Print "Нажата кнопка Пропустить"
End Select

Диалоговое окно для ввода данных

Окно для ввода данных реализуется с помощью функции InputBox(). Формат функции:

<Результат> = InputBox(<Сообщение>[, <Заголовок>[,
                       <Значение по умолчанию>[, <X>[, <Y>[,
                       <Файл справки>, <Контекст>]]]]])

В параметре <Сообщение> указывается текст сообщения. Если необходимо вывести сообщение на нескольких строках, то следует дополнительно указать последовательность символов \r\n (перевод каретки и перевод строки) или только символ \r. Вставить эту последовательность символов позволяет функция Chr(<Код символа>). Можно также воспользоваться одной из констант, которые мы уже рассматривали при изучении функции MsgBox() в предыдущем разделе. Пример вывода сообщения на нескольких строках:

Dim Результат
Результат = InputBox("Строка 1" & Chr(13) & "Строка 2" _
                     & vbNewLine & "Строка 3")
Debug.Print Результат

Необязательный параметр <Заголовок> задает текст, который будет отображен в заголовке окна. Если параметр не указан, то выводится имя приложения. В необязательном параметре <Значение по умолчанию> можно указать значение, которое отобразится в текстовом поле. Пример:

Dim Результат
Результат = InputBox("Текст сообщения", "Текст заголовка", _
                     "Значение по умолчанию")

В необязательных параметрах <X> и <Y> можно указать координаты вывода окна на экране относительно левого верхнего угла. Положительная ось X направлена вправо, а положительная ось Y — вниз. Если параметры не указаны, то окно выводится по центру.

Необязательный параметр <Файл справки> задает имя справочного файла, а параметр <Контекст> — номер раздела в справочном файле. Эти параметры должны указываться одновременно.

Функция возвращает текст, введенный пользователем в текстовое поле. Если пользователь нажал кнопку Отмена или кнопку Закрыть в заголовке окна, то функция вернет пустую строку.

Переделаем нашу первую программу так, чтобы она здоровалась не со всем миром, а только с нами (листинг 1.8).

Листинг 1.8. Пример использования функции InputBox()

Dim Имя
Имя = InputBox("Введите ваше имя:")
If Имя = Empty Then
   MsgBox "Вы не ввели имя"
Else
   MsgBox "Привет, " & Имя
End If
Предыдущая статья Все статьи Следующая статья