" мы вкратце познакомились с диалоговым сообщением msgbox. Но это было простейшее информационное сообщение. Теперь рассмотрим подробнее работу с функцией MsgBox и все виды диалоговых сообщений.
Функция MsgBox имеет следующий синтаксис:
MsgBox (сообщение [, константы сообщения] [, заголовок] [, файл справки hlp, контекст справки])
Обязательным параметром является «Сообщение», остальные могут быть опущены.
MsgBox “Текст сообщения ”
Диалоговое окно вида:
создается следующей командой:
MsgBox "Текст содержащий вопрос", vbYesNo, "Название сообщения"
Для создания сообщения такого вида:
команда будет выглядеть так:
MsgBox "Текст содержащий вопрос", vbYesNoCancel, "Название сообщения"
Сообщение такого вида:
создается командой:
MsgBox "Текст содержащий вопрос", vbAbortRetryIgnore, "Название сообщения"
т.е. из всех трех примеров в команде меняется только второй параметр (vbYesNo, vbYesNoCancel, vbAbortRetryIgnore). Это и есть значения (константы) определяющие вид сообщения. Параметры (vbYesNo, vbYesNoCancel) могут быть заменены на числовое значение, например диалог vbYesNo можно вызвать, указав 4: MsgBox "Текст содержащий вопрос", 4, "Название сообщения".
Ниже приведен полный список констант и эквивалентных им цифровых значений:
Константа | Значение | Описание |
vbOKOnly | Выводит сообщение с кнопкой OK |
|
vbOKCancel | Выводит сообщение с кнопками OK и Отмена |
|
vbAbortRetryIgnore | Выводит сообщение с кнопками Прервать , Повтор, Пропустить |
|
vbYesNoCancel | Выводит сообщение с кнопками Да , Нет , Отмена . |
|
Выводит сообщение с кнопками Да и Нет |
||
vbRetryCancel | Выводит сообщение с кнопками Повтор и Отмена |
В сообщениях можно слегка изменить внешний вид, назначить кнопку по умолчанию, добавить кнопку "Справка" путем сложения констант.
Например: MsgBox "Текст содержащий вопрос", vbYesNoCancel+vbInformation+ vbMsgBoxHelpButton+vbDefaultButton2, "Название сообщения" построит сообщение вида:
vbInformation
- добавляет иконку восклицания в сообщение
vbMsgBoxHelpButton
- добавляет кнопку "Справка"
vbDefaultButton2
- устанавливает фокус на второй кнопке ("Нет
")
Ниже таблица со списком констант иконок и констант, устанавливающих фокус на кнопках:
Константа | Значение | Описание |
vbCritical | Выводит иконку критического сообщения (красный овал с крестом) |
|
vbQuestion | Выводит иконку с вопросительным знаком |
|
vbExclamation | Выводит иконку с восклицательным знаком (в желтом треугольнике) |
|
vbInformation | Выводит иконку информационного сообщения |
|
vbDefaultButton1 | Устанавливает фокус по умолчанию на первой кнопке |
|
vbDefaultButton2 | Устанавливает фокус по умолчанию на второй кнопке |
|
vbDefaultButton3 | Устанавливает фокус по умолчанию на третьей кнопке |
|
vbDefaultButton4 | Устанавливает фокус по умолчанию на четвертой кнопке |
|
vbMsgBoxHelpButton | Добавляет кнопку Справка |
|
vbMsgBoxRight | Выравнивание текста сообщения по правой стороне |
|
vbMsgBoxRtlReading | Зеркально переворачивает все элементы в сообщении (см. снимок ниже) |
Определяться выбор пользователя будет с помощью . В некоторых ситуациях можно использовать .
Например, вызовем сообщение двойным нажатием ЛКМ по любой ячейке на листе. В соответствии с выбором пользователя, выведем в эту ячейку текст.
Создаем новую книгу Excel и переходим в режим Visual Basic (Alt+F11). В окне проекта выбираем «Лист1 » и кликаем по нему два раза ЛКМ.
В открывшемся окне редактора кода вводим следующую процедуру:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean ) If
MsgBox("Текст содержащий вопрос", vbYesNo, "Название сообщения") = vbYes Then
|
В условии IF мы сравниваем результат возвращенный функцией MsgBox, с константой vbYes т.е. если в сообщении нажата кнопка «Да », тогда функция MsgBox возвращает значение vbYes (6). Полный перечень констант и их цифровых эквивалентов ниже. Теперь попробуйте на Листе 1 кликнуть два раза по любой ячейке.
Примечание: При вызове сообщения выполнение программы останавливается до тех пор, пока не будет получен ответ от пользователя.
Второй вариант вызова диалога с помощью .
Создадим вторую процедуру на Листе 2. Код процедуры следующий:
Private Sub
Worksheet_BeforeDoubleClick(ByVal
Target As
Range, Cancel As Boolean
) Select Case
mes |
В этом случае результат вызова MsgBox присваивается переменной mes и далее в Select Case ищется совпадение и согласно совпадения, выполняются действия.
Вот и все. Ниже прикреплен готовый пример, рассмотренный в этой статье.
Перечень констант и значений, возвращаемых функцией MsgBox:
Константа | Значение | Кнопка |
vbCancel | Отмена |
|
Прервать |
||
Повтор |
||
vbIgnore | Пропустить |
|
В VBA ввод и вывод информации (для взаимодействия с пользователем) можно осуществлять в диалоговых окнах. Диалоговое окно ввода значений реализуется встроенной функцией InputBox. В окне ввода, реализованное функцией InputBox, отображается поле для ввода значения переменной, в которое пользователь должен ввести определенное значение. Далее пользователь должен нажать кнопку ОК.
Функция InputBox() имеет следующий синтаксис:
Имя_Переменной = InputBox(Prompt, , , , , , )
Где аргументы: Prompt или Сообщение - обязательный аргумент, который задает в диалоговом окне информационное сообщение. Все остальные аргументы являются необязательными. Title задает заголовок окна. На рис 1 приведен модуль, в котором применена функция InputBox.
Рис. 1.
После выполнения модуля 2 появляется окно сообщения "Ввод значений переменных" (рис.2), в котором нужно ввести число и нажать кнопку ОК. В окне диалога (Рис.2), реализованном функцией InputBox (рис 1), отображаются: Заголовок окна - Ввод значений переменных; Сообщение - Введите число; Кнопки (по умолчанию) - ОК и Cancel; Поле предназначенное для ввода значений переменной.
Рис. 2.
Для вывода информации применяются диалоговые окна сообщений, реализуемые оператором MsgBox или функцией MsgBox() . MsgBox может использоваться как оператор. Оператор MsgBox осуществляет вывод информации в диалоговом окне и устанавливает режим ожидания нажатия кнопки пользователем.
Оператор MsgBox имеет следующий синтаксис:
MsgBox Prompt, , , ,
Где аргументы: Prompt или Сообщение - обязательный аргумент, задающий в окне выводимое информационное сообщение. Все остальные аргументы являются необязательными. Buttons - Кнопки, которые можно использовать в диалоговом окне вывода сообщений. В окне сообщений могут применяться различные кнопки (ОК, Отмена и т.д.). Если не указывать, какие кнопки необходимо отображать в окне сообщений, то по умолчанию отображается кнопка ОК. Кроме того, в диалоговых окнах вывода сообщений можно использовать различные значки (vbQuestion - значок вопросительного знака, vbExclamation - значок восклицательного знака и т.д.).
Модуль, в котором MsgBox используется как оператор, приведен на рис. 3 (оператор MsgBox "3", vbOKCancel, "Вывод значений").
Рис. 3
При запуске модуля 4 на исполнение отображается окно сообщений "Вывод значений" (рис. 4), в котором необходимо нажать кнопку ОК. В окне (Рис.4), реализованном оператором MsgBox (Рис. 3), отображаются: Заголовок окна - Вывод значений; Сообщение - 3; Кнопки - ОК и Отмена.
Рис. 4
Например, для вычисления функции типа y = 5 x 2 + 7 x + 9, можно использовать функцию InputBox и оператор MsgBox (рис. 5)
Рис. 5
После выполнения модуля 5 отображается окно ввода
Рис. 6
После ввода числа, например 789, и щелчка на кнопке ОК, появляется окно сообщения, в котором отображается результат вычисления функции у = 5 x 2 + 7 x + 9.
Рис. 7
MsgBox можно использовать в качестве функции. Функция MsgBox() имеет следующий синтаксис: MsgBox (Prompt, , , , ). В этом случае в окне диалога используют несколько различных кнопок. При нажатии кнопки в окне диалога функция MsgBox() возвращает значение типа Integer, которое зависит от того, какая из кнопок была нажата в диалоговом окне вывода сообщений.
Любая процедура состоит из трех частей: ввода, выполнения и вывода. Ввод - это информация, необходимая для выполнения процедуры; вывод - это то, что получилось в результате выполнения процедуры.
Свойства объектов, значения ячеек и значения переменных - все это примеры ввода. Данные ввода можно получить во время выполнения процедуры от пользователя. Это называется пользовательским вводом.
Наиболее простая форма пользовательского ввода - это щелчок на кнопке в окне сообщения. Немного сложнее - это ввод одного значения в поле ввода диалогового окна.
4.1.1 Окно сообщения
С помощью окна сообщения функции MsgBox() вы можете задать вопрос, а затем, в зависимости от ответа, выполнить то или иное действие.
Функция MsgBox() имеет пять аргументов:
MsgBox(Prompt:=[, Buttons:=] [, Title:=] [, HelpFile:=, Context:=])
АргументPrompt определяет сообщение, которое появится в диалоговом окне. Наберите текст (в кавычках). Используйте переменную типа string или объединенные строковые переменные и строки со значком &, например:
“Этот экран высотой в "& AppIication.UsableHeight &" точек"
АргументButtons определяет, какие кнопки появятся в окне сообщения. Укажите их, используя такие константы, как vbExclamation или vbOK. Эти константы VBA представляет как числа. Хотя вместо констант можно применять числа для обозначения кнопок, однако рекомендуем использовать константы, поскольку при этом вы получите легко читаемый код. Параметры аргумента Button можно разделить на несколько групп. Две наиболее важные - это пиктограммы и кнопки. В окне сообщения вы можете поместить четыре типа пиктограмм и шесть типов кнопок. Другие параметры определяют, какая кнопка считается нажатой по умолчанию и работа какого приложения приостанавливается, когда появляется диалоговое окно, – только Excel или вообще всех приложений. В таблице 4.1 приведены эти параметры.
Таблица 4.1 – Значения константы аргумента Button функции MsgBox
Константа | Значение | Описание |
VbOKonly | Выводит кнопку ОК | |
VbOKCancel | Выводит кнопки ОК и Отмена | |
VbAbortRetryIgnore | Выводит кнопки Прекратить, Повторить и Игнорировать | |
VbYesNoCancel | Выводит кнопки Да, Нет и Отмена | |
VbYesNo | Выводит кнопки Да и Нет | |
VbRetryCancel | Выводит кнопки Повторить и Отмена | |
VbCritical | Выводит пиктограмму Critical Message (Критическое сообщение) | |
VbQuestion | Выводит пиктограмму Question mark (Предупреждающий запрос) | |
VbExclamation | Выводит пиктограмму Exclamation (Предупреждение) | |
VbInformation | Выводит пиктограмму Information | |
VbDefaultButton1 | Принимает по умолчанию первую кнопку | |
VbDefaultButton2 | Принимает по умолчанию вторую кнопку | |
VbDefaultButton3 | Принимает по умолчанию третью кнопку | |
VbApplicationModal | Excel прекращает работу закрытия окна сообщения | |
VbSystemModal | Приостанавливается работа всех приложений до закрытия окна сообщения |
Для того чтобы в окне сообщения отобразилось несколько кнопок, соедините константы знаком «плюс». Нельзя вывести в окне сообщения две пиктограммы, но можно управлять как пиктограммой, так и типом появляющихся кнопок. Окно сообщения появляется всегда только в центре экрана. Если никакая другая кнопка не указана, в окне сообщения отображается только кнопка ОК.
Аргумент Title определяет заголовок окна сообщения. Как и Prompt, этот аргумент должен быть строкой, строковой переменной или объединением строк и строковых переменных. Вы можете не указывать этого аргумента, тогда по умолчанию названием окна сообщения будет Microsoft Excel.
Для того чтобы указать текущую справку, используйте четвертый и пятый аргумент (или проигнорируйте их). Аргумент HelpFile - имя файла справки, а аргумент Context указывает раздел в нем. Если вы указали один из этих аргументов, то должны указать и второй. При этом Excel автоматически добавит кнопку справки в окно сообщения.
Следующий код отображает два окна сообщения: первое с заголовком - "Системн_информ" - содержит пиктограмму с восклицательным знаком и сообщение об используемой высоте экрана; второе с заголовком - "Системная информация" - содержит сообщение об используемой ширине экрана.
Sub ShowMessageOK()
MsgBox Prompt:=" Высота этого экрана составляет" _
& Application.UsableHeight & " точек", Buttons:=vbExclamation, Title:="Системн_информ"
MsgBox "Ширина этого экрана " & Application.UsableWidth & _
" точек", vbInformation, "Системная информация"
4.2 Принятие решения
Очень просто вывести на экран несколько кнопок: используйте константы, указанные в таблице 3.1. Вы можете вывести окна сообщения с кнопками Да и Нет, кнопками Да, Нет и Отмена, а также кнопками Прекратить, Повторить, Игнорировать. Проанализировав в коде значение, возвращенное функцией MsgBox (таблица 4.2), можно определить, какая кнопка нажата, и направить выполнение программы по нужному пути.
Таблица 4.2 – Значения, возвращаемые функцией MsgBox
Константа | Значение | Нажатая кнопка |
VbOK | ОК | |
VbCansel | Отмена | |
VbAbort | Прервать | |
VbRetry | Повторить | |
VbIgnore | Пропустить | |
VbYes | Да | |
VbNo | Нет |
Следующий пример кода выводит окно сообщения с кнопками Да и Нет. Если пользователь щелкнет на кнопке Да, то появится другое окно сообщения с надписью "Продолжаю. . . ". Если пользователь щелкнет на кнопке Нет, появится сообщение "Процесс прерван". Второй аргумент использует vbQuestion плюс vbYesNo: окно сообщения будет содержать знак вопроса и кнопки Да и Нет.
Sub VoprosYesNo()
Dim Indik As Integer
Indik = MsgBox("Хотите продолжать?", vbQuestion + vbYesNo, "Вопрос пользователю")
If Indik = vbYes Then
MsgBox "Продолжаю. . .", vbInformation, "Системное сообщение"
MsgBox "Процесс прерван", vbCritical, "Системное сообщение"
В этом примере кода показаны два способа использования функции MsgBox. В первом случае круглые скобки ставятся сразу после слова MsgBox и после третьего аргумента. Это означает, что используется возвращаемое значение функции MsgBox. Следующие две функции не используют возвращаемого значения, поэтому круглые скобки не ставятся. Кнопки, расположенные в окне сообщения, определяют значение возвращаемой величины. Возвращаемое значение функции MsgBox является константой, которая начинается с vb и заканчивается словом, написанным на кнопке, например ОК или Отмена. Если в окне сообщения находятся кнопки Да и Нет, то функция MsgBox возвращает значение vbYes или vbNo.
В данном коде переменная Indik равна результату функции MsgBox. Команда If проверяет, равняется ли значение Indik vbYes; если да, она выполняет соответствующие действия.
4.3 Окно ввода
Функция InputBox() немного сложнее, чем MsgBox(), и позволяет ввести реальное значение или текстовую строку. Поскольку InputBox() получает значение, её бессмысленно применять, не используя введенное значение. Поэтому эта функция всегда записывается с круглыми скобками.
Функция InputBox() может иметь до семи аргументов:
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
Необходимым является только первый - Prompt, в котором указывается сообщение в окне. Вторым является Title.
Третьим – значение окна ввода, принимаемое по умолчанию. Четвертый и пятый аргументы указывают положение окна ввода. Если они пропускаются, окно будет располагаться посередине экрана.
Шестой и пятый аргументы определяют файл справки и его раздел. Если вы используете один из них, то необходимо использовать и другой. Тогда Excel добавит к окну ввода кнопку Справка.
Функция InputBox() всегда возвращает строку. Даже если пользователь введет число – в действительности это строка. В большинстве случаев VBA переводит строку в число. Однако иногда перевод осуществляется неправильно. В таком случае нужно перевести возвращаемое значение в другой тип данных. Используйте для этого одну из функций перевода, например функцию Сint (значение), которая переводит возвращаемое значение в целое число.
Щелкая на кнопке Отмена, вы ожидаете, что возвращаемой величиной будет vbCancel. Однако это неверно. Поскольку InputBox() возвращает строку, щелчок на кнопке Отмена приведет к тому, что будет возвращена пустая строка (набор кавычек - ""). Рассмотрите следующий пример, если ничего не введено (пустая строка), то происходит выход из подпрограммы.
Sub Vvod_lnputBox()
Dim s As String, sreal As Single
s = InputBox(Prompt:="Какая зарплата?:", _
Title:="Вопрос", Default: =550)
If s = "" Then Exit Sub
sreal = CSng (s)
MsgBox "Зарплата составляет" & s & " налоги " & sreal * 0.13
Иногда необходимо, чтобы пользователь ввел только конкретный тип данных. В этом случае используйте метод InputBox() вместо функции InputBox(). Поставив Application. перед InputBox(), вы укажете VBA, что необходимо использовать метод Excel InputBox(), а не функцию VBA. У метода InputBox() имеется еще и восьмой аргумент - Type. Указав тип, вы тем самым требуете (от пользователя) ввести только определенный тип данных. Чтобы разрешить ввод нескольких типов данных, добавьте значения различных типов данных. Однако если вы используете метод InputBox(), щелчок на кнопке Отмена возвращает значение False, а не пустую строку.
4.4 Ввод-вывод при помощи ячеек Excel
Для ввода исходных данных из конкретных ячеек рабочего листа Excel, а также для вывода результатов расчета в ячейки может быть эффективно применен объект ActiveCell. Объект Range используется для указания ячеек. Объект ActiveCell указывает на ячейку (или объект Range), который имеет фокус при вводе данных с клавиатуры. Для этого используется свойство Value. Например, в ячейку с адресом А5 необходимо записать значение переменной Rost:
Range(“A5”).Select
ActiveCell.Value = Rost
Обратная процедура выполняется аналогично:
Rost = ActiveCell.Value
Если есть необходимость считывать большое число данных из различных ячеек, адреса которых можно вычислить, целесообразно использование метода Offset(R,C), где R – смещение на R строк вниз относительно строки активной ячейки, C – смещение на С столбцов вправо относительно столбца активной ячейки. Например, следующая строка записывает значение переменной Rost в ячейку В7.
В этой статье Вы научитесь создавать окно сообщения в VBA Excel, которое может отображать различную информацию.
Функция MsgBox отображает окно сообщения и ждет, когда пользователь нажмет кнопку, а затем действие будет выполнено на основе кнопки, нажатой пользователем.
MsgBox(prompt[,buttons][,title][,helpfile,context])
Параметр Buttons может принимать любое из следующих значений:
Вышеуказанные значения логически разделены на четыре группы: первая группа (от 0 до 5) указывает кнопки, которые будут отображаться в окне сообщения. Вторая группа (16, 32, 48, 64) описывает стиль значка, который будет отображаться, в третью группу (0, 256, 512, 768) указывает на то, какая кнопка должна быть по умолчанию, а четвертую группу (0, 4096) определяет модальность окна сообщения.
Функция MsgBox может возвращать одно из следующих значений, которое может использоваться для идентификации кнопки, которую пользователь нажал в окне сообщения.
Sub MessageBox_Demo() "Простое сообщение MsgBox ("Привет") "Сообщение с заголовком и кнопками да, нет и отмена a = MsgBox("Вам нравится синий цвет", 3, "Выберите ответ") "Код нажатой кнопки MsgBox ("Значение ответа " & a) End Sub
Шаг 1 - Вышеуказанная функция может быть выполнена либо нажатием кнопки «Выполнить» в окне VBA, либо нажатием на кнопку, которую Вы сами добавили на лист Excel.
Шаг 2 - Простой текстовый ящик отображается с сообщением «Добро пожаловать» и кнопкой «ОК»
Использование функции MsgBox в VBA Excel, ее синтаксис и параметры. Значения, возвращаемые функцией MsgBox. Примеры использования.
Функция MsgBox предназначена в VBA Excel для вывода сообщения в диалоговом окне, ожидания нажатия кнопки и возврата значения типа Integer, указывающего на то, какая кнопка была нажата. Для упрощения восприятия информации, в этой статье не рассматриваются параметры, связанные с контекстной справкой и модальностью диалогового окна MsgBox.
MsgBox (Prompt [, Buttons ] [, Title ])
Обязательным параметром функции MsgBox является Prompt , если Buttons иTitle явно не указаны, используются их значения по умолчанию. Кроме того, если необязательные параметры не указаны и возвращаемое значение не присваивается переменной, сообщение не заключается в скобки:
Пример 1
Sub Test1() MsgBox "Очень важное сообщение!" End Sub
*Максимальная длина параметра Prompt составляет примерно 1024 знака и зависит от их ширины.
**В Excel по умолчанию в заголовке MsgBox выводится надпись «Microsoft Excel».
Константа | Описание | Значение |
vbOKOnly | Отображается только кнопка OK. | 0 |
vbOKCancel | Отображаются кнопки OK и Cancel (Отмена). | 1 |
vbAbortRetryIgnore | Отображаются кнопки Abort (Прервать), Retry (Повторить) и Ignore (Пропустить). | 2 |
vbYesNoCancel | Отображаются кнопки Yes (Да), No (Нет) и Cancel (Отмена). | 3 |
vbYesNo | Отображаются кнопки Yes (Да) и No (Нет). | 4 |
vbRetryCancel | Отображаются кнопки Retry (Повторить) и Cancel (Отмена). | 5 |
Константа | Описание | Значение |
vbCritical | Отображается значок Critical - Критичное сообщение, сообщение об ошибке. | 16 |
vbQuestion | Отображается значок Question - Сообщение с вопросом. | 32 |
vbExclamation | Отображается значок Exclamation - Предупреждающее сообщение. | 48 |
vbInformation | Отображается значок Information - Информационное сообщение. | 64 |
Для просмотра отображаемых значков, скопируйте код в свой модуль и запустите на выполнение:
Пример 2
Sub Test2() Dim a As Integer a = MsgBox("Критичное сообщение, сообщение об ошибке", 16) a = MsgBox("Сообщение с вопросом", 32) a = MsgBox("Предупреждающее сообщение", 48) a = MsgBox("Информационное сообщение", 64) End Sub
Константа | Кнопка | Значение |
vbOK | OK | 1 |
vbCancel | Отмена | 2 |
vbAbort | Прервать | 3 |
vbRetry | Повторить | 4 |
vbIgnore | Пропустить | 5 |
vbYes | Да | 6 |
vbNo | Нет | 7 |
Значение, возвращаемое функцией MsgBox, используется для выбора дальнейших действий исполняемой программы в зависимости от нажатой кнопки.
Для третьего примера зададим следующие параметры первой функции MsgBox:
Вторая функция MsgBox используется как простое информационное сообщение с параметрами по умолчанию.
Пример 3
Sub Test3() Dim a As Integer a = MsgBox("Выберите кнопку!", 323, "Выбор кнопки") If a = 6 Then MsgBox "Вы нажали кнопку: Да" ElseIf a = 7 Then MsgBox "Вы нажали кнопку: Нет" Else MsgBox "Вы нажали кнопку: Отмена" End If End Sub
В этом примере, в зависимости от нажатой кнопки в первом диалоговом окне, во втором сообщении выводится название нажатой кнопки. Обратите внимание, что вторая кнопка в открывшемся первом окне MsgBox выделена по умолчанию и срабатывает при нажатии клавиши «Enter».
А что будет, если первое диалоговое окно из третьего примера закрыть крестиком? Проверьте сами.