Посмотрите на рис. 5.1, на котором показано, что произойдет, если вы попытаетесь закрыть рабочую книгу без ее сохранения.
Вы можете подумать, что создание такого окна сообщения требует многих часов программирования. Заблуждаетесь! Такое окно можно создать с помощью всего одной строчки кода VBA:
MsgBox "Сохранить изменения в ' “ & ThisWorkbook.Name & “ '? “, _
vbYesNoCancel + vbExclamation
Отметим, что оператор MsgBox записан здесь в две строки, хотя в окне кода редактора Visual Basic он может располагаться в одну строку. В VBA символами продолжения строки служит пробел с последующим символом подчеркивания.
Рис. 5.1. Одно из многих окон сообщений, генерируемых Excel
В этом коде свойство ThisWorkbook.Name возвращает имя текущей рабочей книги.
Функция MsgBox служит для организации диалоговых окон, содержащих какие-либо сообщения. После своего появления на экране окно сообщения ждет, пока пользователь щелкнет на одной из кнопок, присутствующих в окне. В зависимости от того, на какой кнопке щелкнул пользователь, функция возвращает определенное целое число. Функция MsgBox имеет следующий синтаксис:
Приглашение (prompt) - единственный обязательный аргумент этой функции. Значением этого аргумента служит строка текста, которая появляется как сообщение в диалоговом окне. Эта строка текста должна быть заключена в двойные кавычки. Отметим использование круглых скобок в синтаксисе MsgBox - они указывают на то, что в данном случае MsgBox является функцией, возвращающей какое-либо значение. Если скобки опушены, то для VBA это признак того, что данное выражение значение не возвращает. Если вы хотите возвратить значение, надо использовать код, подобный следующему:
Если не указан аргумент кнопки, то VBA предполагает, что в диалоговом окне сообщения присутствует только кнопка ОК. Аргумент кнопки - очень "богатый" по своим возможностям аргумент, который позволяет управлять следующими параметрами окна сообщения.
Количество кнопок в окне.
Типы кнопок и их размещение в окне.
Пиктограмма, отображаемая в окне.
Какая кнопка назначается кнопкой по умолчанию.
Режим (модальность) окна сообщения.
В табл. 5.1 показаны возможные установки для этого аргумента. В этой таблицы значения аргумента разбиты на группы. Первая группа значений устанавливает число и тип кнопок. Вторая позволяет выбрать стиль пиктограммы, отображаемой в диалоговом окне сообщения. Третья назначает кнопку по умолчанию. Четвертая группа устанавливает режим окна сообщения. Для создания конечного значения аргумента кнопки можно использовать только одно значение из каждой группы, объединив их знаком "плюс".
Таблица 5.1. Установки для аргумента кнопки функции MsgBox
Группа
Константа
Значение
Описание
Группа 1
vbOKOnly
Отображает только кнопку ОК (установка по умолчанию)
vbOKCancel
Отображает кнопки ОК и Отмена1
vbAbortRetryIgnore
Отображает кнопки Стоп, Повтор и Пропустить
voYesNoCancel
Отображает кнопки Да, Нет и Отмена
vbYesNo
Отображает кнопки Да и Heт
vbRetryCancel
Отображает кнопки Повтор и Отмена
Группа 2
vbCritical
Отображает запрещающую пиктограмму (белый знак × в красном круге)
vbQuestion
Отображает предупреждающую пиктограмму (знак вопроса на белом фоне)
vbExclamation
Отображает предупреждающую пиктограмму (знак вопроса в красном треугольнике)
vbInformation
Отображает информационную пиктограмму (знак "i" на белом фоне)
Группа 3
vbDefaultButton1
Первая кнопка - кнопка по умолчанию
vbDefaultButton2
Вторая кнопка - кнопка по умолчанию
vbDefaultButton3
Третья кнопка - кнопка по умолчанию
vbDefaultButton4
Четвертая кнопка - кнопка по умолчанию
Группа 4
vbApplicationModal
Режим приложения: пользователь должен закрыть окно сообщения перед продолжением работы в текущем приложении
vbSystemModal
Системный режим: все приложения недоступны, пока пользователь не закроет окно сообщения
Дополнительная группа
vbMsgBoxHelpButton
Отображает кнопку Справка
vbMsgBoxSetForeground
Делает окно сообщения окном переднего плана
vbMsgBoxRight
Отображает окно сообщения, выровненным по правому краю окна приложения
vbMsgBoxRtlReading
Для иврита и арабского языка указывает, что текст должен выводиться справа налево
Чтобы не ошибиться при вводе значений аргумента кнопки, используйте список констант, который появляется после ввода знака "+". Знак "+" используется для объединения нескольких констант при задании сложного аргумента кнопки. - Прим. ред.
Чтобы просмотреть список всех внутренних констант Visual Basic, откройте с помощью клавиши <F2> окно просмотра объектов Object Browser и выберите класс Constants (Константы). В этом же окне можно найти все внутренние константы Excel.
Аргумент заголовок позволяет задать текст, помещаемый в строке заголовка диалогового окна сообщения. Если этот аргумент опущен, то в строке заголовка отображается Microsoft Excel.
Аргументы файл_справки и содержание используются тогда, своего приложения для своего приложения собственную справочную систему.
Напомню, что сейчас мы рассматриваем MsgBox как функцию, это подразумевает, что она должна возвращать значение. В табл. 5.2 представлен список значений, возвращаемых функцией MsgBox. Возвращаемое значение зависит от того, на какой кнопке щелкнул пользователь в окне сообщения.
Таблица 5.2. Значения, возвращаемые функцией
Константа
Значение
Нажатая кнопка
vbOK
ОК
vbCancel
Отмена
vbAbort
Стоп
vbRetry
Повтор
vbIgnore
Пропустить
vbYes
Да
vbNo
Нет
Глядя на эту таблицу, вы можете задать вопрос: "Какой тип данных надо назначить переменной, которая будет принимать возвращаемое функцией MsgBox значение?". Наилучший тип переменной, принимающей значение функции MsgBоx, - Integer. В следующем примере мы создадим окно сообщения с несколькими кнопками, а затем покажем возвращаемое значение в другом окне сообщения.
Откройте редактор Visual Basic.
Щелкните правой кнопкой мыши на элементе ЭтаКнига в окне проектов Project Explorer.
В контекстном меню выберите команду Inserts Module (Вставка Модуль).
Выполните команду Insert Procedure (Вставка Процедура).
Введите название процедуры ПримерОСообщения и нажмите клавишу <Enter>.
Введите следующий код процедуры:
Dim iResult As Integer
iResult = MsgBox(“Щелкните на кнопке”, vbYеsNoCancel)
MsgBox iResult
Нажмите клавишу <F5> для выполнения процедуры. Отобразится окно сообщения, как на рис. 5.2.
Рис. 5.2. В соответствии с заданными аргументами окно сообщения содержит три кнопки
Щелкните на кнопке Да. Следующее диалоговое окно должно вывести цифру 6. Посмотрите в табл. 5.2, чтобы удостовериться, что число 6 - результат щелчка на кнопке Да. Щелкните на кнопке ОК, второе окно сообщения закроется, и вы вернетесь в редактор Visual Basic.
Снова нажмите клавишу <F5> для выполнения процедуры. Теперь в окне сообщения щелкните на кнопке Нет. Во втором окне сообщения отобразится цифра 7. Для возврата в редактор Visual Basic щелкните на кнопке ОК.
Нажмите клавишу <F5> еще раз. В окне сообщения щелкните на кнопке Отмена. Во втором окне сообщения отобразится цифра 2. Щелкните на кнопке ОК.
Теперь вы знаете, как показать значение, возвращаемое окном сообщения. В 6-м часе "Логика условных операторов" вы узнаете, как можно использовать это значение.