Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Встроенные диалоговые окна
Диалоговые окна предназначены для информирования пользователя, а также для получения данных от пользователя. В большинстве случаев диалоговые окна являются модальными (т. е. блокирующими все окна приложения или только родительское окно) и отображаются на непродолжительный промежуток времени. Язык 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)
или в MacintoshChr(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
Помощь сайту
Yandex-деньги: 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов