Для организации диалога с пользователем VBA представляет две встроенные функции - MsgBox и InputBox. Окно сообщений MsgBox выводит сообщения для пользователя, а окно ввода InputBox обеспечивает возможность получения информации от пользователя.
Функция MsgBox() выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата.
Формат функции MsgBox:
MsgBox (Prompt [, Buttons] [, Title] [, HelpFile, Context])
Назначение параметров:
Prompt – строковое выражение, отображаемое как сообщение в диалоговом окне;
Title – строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот параметр опущен, в строку заголовка помещается имя приложения, из которого запускается программа VBA;
HelpFile – строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне; обычно это файл, который вы уже должны были создать с помощью Windows Help Compiler. Если этот параметр указан, необходимо также указать параметр Context;
Context – числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот параметр указан, необходимо указать также параметр HelpFile;
Buttons – числовое выражение, которое задает количество и тип кнопок в диалоговом окне MsgBox. Buttons указывает также кнопку по умолчанию в диалоговом окне и содержит ли это диалоговое окно стандартные значки Windows для предупредительных сообщений и запросов пользователя. Значения Buttons можно получить из справочной системы.
Простой пример использования функции MsgBox:
Sub sample2()
MsgBox "Видите ли вы две кнопки?", vbYesNo + vbInformation, "Сообщение"
End Sub
В данном примере MsgBox применяется не в виде функции, а в виде процедуры (т.е. не возвращает никакого значения). Следовательно, код выбранной кнопки нигде не сохраняется и не может быть использован. Чтобы определить, какая кнопка была нажата, MsgBox необходимо вызвать как функцию, т.е. сохранить возвращаемое значение в переменную (Листинг 2).
Листинг 3. Использование MsgBox
Sub sample3()
Dim res ' объявляем переменную
' вызываем MsgBox и сохраняем значение в переменной
res = MsgBox("Видите ли вы две кнопки?", vbYesNo + vbInformation, "Сообщение") Debug.Print res ' печатаем полученное значение
End Sub
При выполнении этого макроса, когда пользователь выбирает кнопку Yes или No в переменной res сохраняется число, соответствующее выбранной кнопке.
Вместо возвращаемых функцией MsgBox целочисленных значений удобнее пользоваться предопределенными константами VBA. В таблице 7 приведены возвращаемые значения констант функции MsgBox.
Таблица 7 – Возвращаемые значения функции MsgBox
Константа | Означает, что пользователь нажал кнопку |
vbAbort | Стоп (Abort) |
vbCancel | Отмена (Cancel) |
vbIgnore | Пропустить (Ignore) |
vbNo | Нет (No) |
vbOk | Ок |
vbRetry | Повтор (Retry) |
vbYes | Да (Yes) |
Дополним код листинга 3 проверкой возвращенного значения (листинг 4).
Листинг 4. Проверка возвращаемого значения MsgBox
Sub sample4()
' вызываем MsgBox и сохраняем значение в переменной
res = MsgBox("Видите ли вы две кнопки?", vbYesNo + vbInformation, "Сообщение")
' проверяем, какая кнопка нажата
If res = vbYes Then: MsgBox "Вы нажали Yes", "Результат выбора"
Else: MsgBox "Вы нажали No", "Результат выбора"
End If
End Sub
Функция InputBox() выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста, а затем возвращает значение типа String, содержащее текст, введенный в поле. Формат функции InputBox:
InputBox (Prompt [, Title] [, Default] [, XPos] [, Ypos] [, HelpFile, Context])
Назначение параметров:
Prompt – строковое выражение, отображаемое как сообщение в диалоговом окне;
Title – строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот параметр опущен, в строку заголовка помещается имя приложения;
Default – строковое выражение, отображаемое в поле ввода и используемое по умолчанию, если пользователь не введет другую строку. Если этот параметр опущен, поле ввода изображается пустым;
Xpos и Ypos – числовые выражения, которые указывают местоположение окна ввода и являются координатами верхнего левого угла диалогового окна; Xpos – горизонтальное расстояние от левого края окна; Ypos – вертикальное расстояние от верхнего края окна. Если эти параметры опущены, диалоговое окно выравнивается по центру экрана;
HelpFile – строковое выражение, определяющее имя существующего файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот параметр указан, необходимо также указать параметр Context;
Context – числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот параметр указан, необходимо указать также параметр HelpFile.
Приведем пример использования функции InputBox для получения имени пользователя.
Sub sample5()
Dim username As String
username = InputBox("Введите ваше имя ", "Пример 5")
MsgBox ("Здравствуйте, "+username)
End Sub
В результате выполнения этого макроса на экран последовательно выводятся диалоговые окна ввода и вывода (см. рисунок 1).
Рисунок 1 – Интерактивные функции VBA.
Пример 1.1 [4]: Перевести минуты в часы.
Sub lr1()
Const min_1h = 60
Dim min As Integer
Dim Hours As Single
min = Val(InputBox("Введите количество минут"))
Hours = min/min_1h
MsgBox min & " минут составляет " & Hours & " час (а, ов)"
End Sub
Приложение Б
Варианты заданий. VBA. Встроенные функции ввода/вывода.
Написать программу перевода мерных единиц:
1. Километры в метры.
- Метры в сантиметры.
- Дециметры в километры.
- Тонны в килограммы.
- Центнеры в граммы.
- Гектары в квадратные метры.
- Квадратные километры в ары. (1 ар=100 м2).
- Кубические метры в кубические дециметры.
- Кубические дециметры в кубические сантиметры.
- Литры в кубические сантиметры.
- Гектолитры в кубические дециметры.
- Сажени в аршины.
- Аршины в футы.
- Футы в метры
- Метры в дюймы.
- Аршины в сантиметры
- Дюймы в сантиметры
- Морские мили в метры
- Пуды в килограммы.
- Фунты в килограммы
- Пуды в фунты.
- Метры в километры.
- Сантиметры в метры.
- Километры в дециметры.
- Килограммы в тонны.
- Граммы в центнеры.
- Квадратные метры в гектары.
- Ары в квадратные километры (1 ар=100 м2).
- Кубические дециметры в кубические метры.
- Кубические сантиметры в литры.