Вывод сообщений и ввод и данных
Использование справочной системы
Обратиться к справочной системе VBA можно использовать двумя способами:
- использовать функциональную клавишу F1;
- использовать “Помощника”.
Использование функциональной клавиши F1
Этот способ даёт возможность получить справку по всем объектам и ключевым словам VBA. Особенностью этого способа является то, что необходимо точно указать название сущности, по которой необходимо получить справку: имя объекта, его свойства, метода или события, ключевое слово инструкции VBA и т.п.
В качестве примера рассмотрим получения сведений о функции Array.
1. Войти в редактор Visual Basic. Это можно сделать двумя способами:
- щёлкнуть по кнопке Редактор Visual Basic
или
- одновременно нажать на клавиши Alt и F11.
2. Если в окне Project – VBAProject нет ни одного модуля, вставить модуль в текущую рабочую книгу. Для этого в окне Microsoft Visual Basic выбрать пункт меню Insert и в выпадающем окне – пункт Module .
3. В окне кода редактора Visual Basic ввести символ Одиночная кавычка (‘), а за ней – слово array.
4. Установить текстовый курсор внутри слова 'Array (рис.7).
Рис. 7. Получение справки по функции Array
5. Нажать клавишу F1. Появится справка.
Аналогично можно получить справку по объектам, свойствам, методам и событиям объекта.
Использование помощника
Этот способ даёт возможность получить справку только по объектам VBA и их свойствам, методам и событиям. При этом можно в свободной форме задать вопрос о сущности, по которой необходимо получить справку. Например, для получения сведений о свойствах объекта Worksheet нужно выполнить следующие действия.
1. Находясь в окне Microsoft Visual Basic, следует выбрать пункт меню Help, и в приведённом ниже выпадающем меню
выбрать пункт “Справка: Microsoft Visual Basic”, в результате чего появится “Помощник”, который предложит ввести вопрос к справочной системе (рис.8).
Рис. 8. Помощник в окне справочной системы
2. Ввести вопрос What add the new worksheetв окне помощникаи в появившемся диалоговом окне выбирать пункт Worksheets Property (рис.9).
Рис.9. Вод вопроса и выбор пункта ответа.
На экран будет выведена справка Worksheets Propertyпо свойству Add для рабочего листа.
Примеры, приводимые в справочной системе, помогают при разработке приложений VBA. Их содержание можно копировать непосредственно в разрабатываемый проект.
Вывод сообщений и ввод и данных
В этом пункте рассматриваются следующие вывода сообщений на экран дисплея и средства ввода данных с клавиатуры при помощи диалоговых окон:
- использование функции MsgBox;
- использование функции InputBox;
- применение метода InputBox;
- именование аргументов,
- использование объединения текстовых строк.
Функция MsgBox
Функция MsgBox служит для организации диалоговых окон, содержащих какие-либо сообщения. После своего появления на экране окно сообщения ждет, пока пользователь щелкнет на одной из кнопок, присутствующих в окне. В зависимости от того, на какой кнопке щелкнул пользователь, функция возвращает определенное целое число. Функция MsgBox имеет следующий формат:
MsgBox (Prompt [, Buttons] [, Title] [, Helpfile, Context])
Аргументы рассматриваемой функции означают следующее.
Prompt (Приглашение) - обязательный аргумент этой функции. Значением этого аргумента служит строка текста, которая появляется как сообщение в диалоговом окне. Эта строка текста должна быть заключена в двойные кавычки. Круглые скобки в синтаксисе MsgBox указывают на то, что в данном случае MsgBox является функцией, возвращающей какое-либо значение.
Если скобки опущены, то для VBA это признак того, что данное выражение значение не возвращает и результатом выполнения инструкции MsgBox является только вывод диалогового окна.
Все остальные аргументы этой функции не обязательны.
Buttons (Кнопки) – числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и способ, каким используется окно сообщения; аргумент необязателен. Значение по умолчанию этого аргумента равняется 0; его можно задать в виде констант VBA или целым числом. Если не указан аргумент Кнопки, то VBA предполагает, что в диалоговом окне сообщения присутствует только кнопка ОК. Аргумент Кнопки позволяет управлять следующими параметрами окна сообщения:
- количество кнопок в окне;
- типы кнопок и их размещение в окне;
- пиктограмма, отображаемая в окне;
- какая кнопка назначается кнопкой по умолчанию;
- режим окна сообщения.
Значения констант, определяющих число и тип кнопок используемого значка, приведены в таблице 1, 2 и 3.
Таблица 1.Значения аргумента buttons процедуры MsgBox, определяющие отображаемые кнопки в диалоговом окне
Константа | Значение | Отображаемые кнопки |
vbOKOnly | ![]() | |
VbOKCancel | ![]() ![]() | |
VbAbortRetrylgnore | ![]() ![]() ![]() | |
VbYesNoCancel | ![]() ![]() ![]() | |
VbYesNo | ![]() ![]() | |
VbRetryCancel | ![]() ![]() |
Таблица 2. Значения аргумента buttons процедуры MsgBox, определяющие отображаемые информационные значки в диалоговом окне
Константа | Значение | Значок сообщения |
VbCritical | ![]() | |
VbQuestion | ![]() | |
VbExclamation | ![]() | |
VbInformation |
Таблица 3. Значения аргумента buttons процедуры MsgBox, определяющие основную кнопку в диалоговом окне
Константа | Значение | Номер основной кнопки |
VbDefaultButton1 | ||
VbDefaultButton2 | ||
VbDefaultButton3 | ||
VbDefaultButton4 |
При написании программ, в которых в зависимости от нажатой кнопки диалогового окна необходимо выполнить определённое действие, вместо возвращаемых числовых значений удобнее использовать следующие константы VBA, которые делают код программы нагляднее и позволяют избежать ошибок при написании программ.
Константа | Значение | Нажатая кнопка |
vbOK | OK | |
vbCancel | Отмена (Cancel) | |
vbAbort | Прервать (Abort) | |
vbRetry | Повторить (Retry) | |
vbIgnore | Пропустить (Ignore) | |
vbYes | Да (Yes) | |
vbNo | Нет (No) |
Чтобы не ошибиться при вводе значений аргумента кнопки, используйте список констант, который появляется после ввода знака "+". Знак "+" используется для объединения нескольких констант при задании сложного аргумента кнопки. Например, использование в процедуре выражения
vbYesNoCancel + vbQuestion + vbDefaultButton1
приведёт к появлению кнопок Да, Нет и Отмена (константа vbYesNoCancel), значка (константа vbQuestion) и по умолчанию к использованию первой кнопки (константа vbDefaultButton1).
Примечание
Чтобы просмотреть список всех внутренних констант VBA, необходимо в окне программного кода VBA щёлкнуть левой кнопкой мыши по имени любой константы и нажать клавишу F1. В появившемся окне можно найти все внутренние константы Excel.
Title (Заголовок) – содержит заголовок окна сообщения; аргумент необязательный. Без этого аргумента в заголовке будет выведено имя приложения MS Office, из которого запускается программа на VBA (Excel, Word и т.д.).
Helpfile (Справка) – строковое выражение, содержащее имя справочного файла Windows. Обычно это файл, созданный разработчиком приложения с помощью Windows Help Compiler.
Context (Раздел) – численное выражение, указывающее раздел в справочном файле, относящийся к отображаемому диалоговому окну.
Аргументы Helpfile и Context не обязательны. Они используются или опускаются вместе.
Аргументы функции необходимо перечислять в том порядке, в каком они размещены в её формате. Следовательно, в функции MsgBox они должны располагаться следующим образом:
Prompt [, Buttons] [, Title] [, Helpfile, Context])
Если какой-либо аргумент опущен, то необходимо включать в список аргументов отмечающие запятые для следующего в списке аргумента.
Пример
В приведённой ниже процедуре ФункцияMsgBox() функция MsgBox используется для:
- определения, какая из кнопок: Да, Нет или Отмена – нажата (щёлкнута) в диалоговом окне этой функции;
- вывода на экран сообщения, какая кнопка была нажата и наименование примера использования этой функции.
Внутренняя константа vbExclamation используется в процедуре для вывода в окне сообщения символа . Определение значения нажатой кнопки осуществляется при помощи инструкции If…Then…Else, синтаксис которой будет подробно рассмотрен в дальнейшем.
Sub ФункцияMsgBox()
Dim Структура As String
Dim Кнопка As Integer
'
' В переменной Структура задается структура диалогового окна
Структура = vbYesNoCancel + vbQuestion + vbDefaultButton1
' В переменную Кнопка вводится целое число, возвращаемое MsgBox
'при нажатии кнопки Да, Нет или Отмена в окне сообщения функции MsgBox
'
Кнопка = MsgBox("Выбрать Да, Нет или Отмена?", Структура, "Примеры функции MsgBox")
'
' На экране отображается соответствующее сообщение '
' в зависимости от значения переменной Кнопка
‘
MsgBox "Равно " & Кнопка, , "Возвращаемое значение"
If Кнопка = vbYes Then MsgBox "Выбрано Да", vbExclamation, "ПРИМЕР 1"
If Кнопка = vbNo Then MsgBox "Выбрано Нет", vbExclamation, "ПРИМЕР 2"
If Кнопка = vbCancel Then MsgBox "Выбрано Отмена", vbExclamation,"ПРИМЕР 3"
End Sub
Ниже приведены диалоговые окна, выведенные на экран в процессе выполнения процедуры ФункцияMsgBox(). Окна ПРИМЕР 1, ПРИМЕР 2 и ПРИМЕР 3 появляются при нажатии кнопок, соответственно, Да, Нет и Отмена. В окне Возвращаемое значение выводится число 6 при выполнении инструкции MsgBox "Равно " & Кнопка, , "Возвращаемое значение", если нажата кнопка Да.
Функция InputBox
Функцию MsgBox целесообразно использовать в случае, если от пользователя надо получить типа Да–Нет или ОК–Отмена. Если необходимо ввести число или текст, то применяется функция InputBox. Эта функция отображает запрос в диалоговом окне ввода, ожидает ввода пользователем строки (или щелчка по кнопке окна) и возвращает строку из поля ввода окна. Функция InputBox имеет следующий формат:
InputBox(Prompt[, Title] [, Default] [, Xpos] [, Ypos] [, Helpfile, Context])
Эта функция требует обязательного задания только аргумента Prompt. Так же, как и в функции MsgBox, значением аргумента Prompt служит текстовая строка, которая отображается в диалоговом окне ввода в качестве сообщения. Строковое значение prompt может содержать несколько строк. Для разделения строк допускается использование символа возврата каретки (Сhr(13)), символа перевода строки (Chr (10)) или комбинацию этих символов (Chr( 13) & Chr (10)).
Аргумент title используется для задания текста, который помещается в строке заголовка окна ввода. Если этот аргумент не задан, то в строке заголовка отображается слово Ввод.
Аргумент default задает значение, которое отображается по умолчанию в поле ввода, пока пользователь не введет свое значение. Если этот аргумент опустить, то отображается пустое поле ввода.
Необязательные аргументы xpos и ypos задают положение окна ввода на экране.
xpos – числовое выражение, задающее расстояние по горизонтали между левой границей диалогового окна и левым краем экрана. Если этот аргумент опущен, диалоговое окно выравнивается по центру экрана по горизонтали.
ypos – числовое выражение, задающее расстояние по вертикали между верхней границей диалогового окна и верхним краем экрана. Если этот аргумент опущен, диалоговое окно помещается по вертикали примерно на одну треть высоты экрана.
Аргументы helpfile и context используются в том случае, если в приложении создаётся собственная система справки.
Возвращаемым значением функции InputBox является значение, введенное пользователем в поле ввода.
Пример
Sub ФункцияInputBox()
Dim Данное As Variant
Данное = InputBox("Введите данное")
MsgBox "Введённое данное равно " & Данное
ActiveCell.Value = Данное
End Sub
Тип возвращаемого значения определен как Variant, т.е. тип определяется введенным значением.
Метод InputBox
В Excel имеется еще один способ ввода данных пользователем в интерактивном режиме, который имеет называние метод InputBox. Формат метода:
Application.InputBox(Prompt,Title,Default,Left,Top,HelpFile,HelpContextId,Type)
Метод InputBox является методом объекта Application, и поэтому здесь присутствует слово Application. Аргументы этогометода, кроме Type, такие же, как и у функции InputBox. Основное отличие синтаксиса метода InputBox от синтаксиса одноименной функции заключается в последнем аргументе Type. Необязательный аргумент Type позволяет явно указать тип возвращаемого значения. В приведённой ниже таблице содержатся значения, которые может принимать этот аргумент.
Значения аргумента Type
Значение | Возвращаемое значение |
Формула | |
Число | |
Текст (строка) | |
Логические значения, такие как ИСТИНА и ЛОЖЬ | |
Ссылка на ячейку | |
Значение ошибки | |
Массив значений |
Пример
Sub Пример()
Dim Данное As Integer
Данное = Application.InputBox("Введите число:", , , , , , , 1)
MsgBox "Введённое данное равно " & Данное
End Sub
Запятые в выражении Application.InputBox указывают места пропущенных аргументов. Последний аргумент – Type имеет значение 1. Это показывает, что допустимыми вводимыми значениями являются только числа.
Преимуществом метода InputBox является возможность обнаружения ошибок при вводе данных. Например, если при выполнении процедуры Пример введено не число, то будет выведено следующее сообщение об ошибке:
Можно суммировать значения аргумента Type. Например, если нужно, чтобы метод мог возвращать как текст, так и числа, следует сделать аргумент Type равным 3 (1 + 2). Если аргумент Type не задан, то метод InputBox по умолчанию возвращает текст.
Пример
Sub ФункцияInputBox2()
Dim Данное As Variant
Данное = Application.InputBox("Введите данное:", , , , , , , 3)
MsgBox "Введённое данное равно " & Данное
End Sub
Пропуск отмечающих запятых, а также перестановка аргументов функции приводит к ошибкам несовпадения типов. Для предотвращения ошибок программирования функций при вводе аргументов VBA предоставляет возможность передавать значения аргументов функции, используя именованные аргументы функций. Приведённая ниже процедура Пример2 иллюстрирует использование именованных аргументов функций Prompt, Title и Type; она решает ту же задачу, что и процедура Пример.
Sub Пример2()
Dim Данное As Integer
Данное = Application.InputBox(Promp t:= "Введите число:", _
Title:="Проверка типа данных", Type:=1)
MsgBox Prompt := "Введённое данное равно " & Данное, _
Title:="Проверка ввода данных"
End Sub
Следует обратить внимание на то, что:
- имя аргумента отделяется от его значения символом “:=” (двоеточие и равно);
- порядок перечисления именованных аргументов не обязательно совпадает с их порядком в формате функции;
- список аргументов функции MsgBox не заключается в скобки;
- в операторе Данное = Application.InputBox … функция InputBox используется как метод приложения Application, и поэтому её аргументы заключаются в скобки.
Ниже приведены результаты выполнения процедуры Пример2.