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

Диалоговые окна предназначены для информирования пользователя, а также для получения данных от пользователя. В большинстве случаев диалоговые окна являются модальными (т. е. блокирующими все окна приложения или только родительское окно) и отображаются на непродолжительный промежуток времени. Язык 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() можно использовать специальные константы:

  • vbCr — вставляет символ \r; эквивалентно Chr(13);
  • vbLf — вставляет символ \n; эквивалентно Chr(10);
  • vbCrLf — вставляет последовательность символов \r\n; эквивалентно Chr(13) & Chr(10);
  • vbNewLine — эквивалентно Chr(13) & Chr(10) или в Macintosh Chr(13);
  • vbTab — вставляет символ табуляции; эквивалентно Chr(9).

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

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

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

  • vbOKOnly — 0 — отображается только кнопка OK (значение по умолчанию);
  • vbOKCancel — 1 — отбражаются кнопки OK и Отмена;
  • vbAbortRetryIgnore — 2 — отображаются кнопки Прервать, Повтор и Пропустить;
  • vbYesNoCancel — 3 — отображаются кнопки Да, Нет и Отмена;
  • vbYesNo — 4 — отображаются кнопки Да и Нет;
  • vbRetryCancel — 5 — отображаются кнопки Повтор и Отмена;
  • vbCritical — 16 — задает вывод иконки критического сообщения (белый крест внутри красного круга). Пример вывода иконки:
MsgBox "Программа выполнила недопустимую ошибку", _
       vbOKOnly + vbCritical
  • vbQuestion — 32 — задает вывод иконки для запроса подтверждения каких-либо действий (синий вопросительный знак внутри белого круга). Пример вывода иконки:
MsgBox "Вы действительно хотите выполнить действие?", _
       vbYesNoCancel + vbQuestion
  • vbExclamation — 48 — задает вывод иконки для предупреждающего сообщения (черный вослицательный знак внутри желтого треугольника). Пример вывода иконки:
MsgBox "Действие может быть опасным. Продолжить?", _
       vbYesNoCancel + vbExclamation
  • vbInformation — 64 — задает вывод иконки для информирующего сообщения (синяя буква i внутри белого круга). Пример вывода иконки:
MsgBox "Текст сообщения", vbOKOnly + vbInformation
  • vbDefaultButton1 — 0 — первая кнопка выбрана по умолчанию (значение по умолчанию). Пример:
MsgBox "Текст сообщения", _
       vbYesNoCancel + vbInformation + vbDefaultButton1
  • vbDefaultButton2 — 256 — вторая кнопка выбрана по умолчанию. Пример:
MsgBox "Текст сообщения", _
       vbYesNoCancel + vbInformation + vbDefaultButton2
  • vbDefaultButton3 — 512 — третья кнопка выбрана по умолчанию. Пример:
MsgBox "Текст сообщения", _
       vbYesNoCancel + vbInformation + vbDefaultButton3
  • vbDefaultButton4 — 768 — четвертая кнопка выбрана по умолчанию;
  • vbApplicationModal — 0 — окно будет модальным в пределах приложения (значение по умолчанию). Прежде чем продолжить работу с приложением окно необходимо закрыть нажатием на одну из кнопок. Пример:
MsgBox "Текст сообщения", vbYesNoCancel + vbInformation _
       + vbDefaultButton3 + vbApplicationModal
  • vbSystemModal — 4096 — окно будет отображаться поверх всех других окон в системе. Прежде чем продолжить работу с приложением окно необходимо закрыть нажатием на одну из кнопок. Пример:
MsgBox "Текст сообщения", vbYesNoCancel + vbInformation _
       + vbDefaultButton3 + vbSystemModal
  • vbMsgBoxHelpButton — 16384 — добавляет в окно кнопку Справка. Пример:
MsgBox "Текст сообщения", vbYesNoCancel + vbInformation _
       + vbDefaultButton3 + vbApplicationModal _
       + vbMsgBoxHelpButton
  • vbMsgBoxRight — 524288 — текст выравнивается заголовка и сообщения по правому краю. Пример:
MsgBox "Текст сообщения", vbYesNoCancel + vbInformation _
       + vbMsgBoxRight

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

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

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

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

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

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

  • vbOK — 1 — нажата кнопка OK;
  • vbCancel — 2 — нажата кнопка Отмена или кнопка Закрыть в заголовке окна;
  • vbAbort — 3 — нажата кнопка Прервать;
  • vbRetry — 4 — нажата кнопка Повтор;
  • vbIgnore — 5 — нажата кнопка Пропустить;
  • vbYes — 6 — нажата кнопка Да;
  • vbNo — 7 — нажата кнопка Нет.

Для примера выполним проверку двумя способами. Первый способ заключается в использовании оператора ветвления 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

Visual Basic for Applications (VBA)
Статьи по Visual Basic for Applications (VBA)

Помощь сайту

Yandex-деньги: 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

Поиск по сайту в Яндексе