Обработчики событий и подробности о редактировании кода

Программы на VBA управляются событиями. Обработчик — это подпрограмма, которая будет выполняться если произойдет соответствующее ей событие.

На рис. 3.7. вы можете видеть окно редактора кода с открытым в нем пустым обработчиком.

Рис. 3.7. Окно Code с обработчиком события нажатия на кнопку

Обратите внимание на первую строчку кода

Private Sub cmd_First_Click()

означает, что эта процедура будет выполнена при щелчке (Click) по кнопке с именем cmd_First. Ключевое слово Private называется модификатором доступности. Оно означает, что данная процедура недоступна для вызова из внешних модулей. Вам не придется настраивать модификаторы доступности вручную — по крайней мере, на данном этапе знакомства с VBA. Так же вам совсем необязательно запоминать тонкости правильного написания заголовков процедур обработчиков событий. Обычно они создаются автоматически.

У элементов управления существует обработчик события, назначаемый по умолчанию, то есть – при двойном щелчке. Обработчики других событий можно настроить в окне редактора кода.

Обратите внимание на верхнюю часть окна редактора кода. В левой ее части расположено поле со списком, в котором видна надпись cmd_First. Если щелкнуть по кнопке с треугольником, которая расположена рядом с этим полем, откроется список, содержащий имена всех элементов управления, расположенных на форме. Также в списке представлена и сама форма, у которой тоже есть свои события, — это строка UserForm. Имя формы в этом списке не применяется, но оно нужно для доступа к форме из внешних программ, например — макросов, обработчиков событий других форм.

В правой части окна расположен список событий.

Чтобы создать процедуру обработчика события для элемента управления или формы, выберите нужный элемент управления в левом поле, а в правом — название события. Каждый элемент управления имеет уникальный набор событий, однако, в них не слишком сложно ориентироваться. На практике чаще всего используется лишь некоторые из них. Обычно события имеют осмысленные англоязычные названия, по которым можно догадаться об их предназначении.

Теперь попытаемся вставить какие-нибудь команды в обработчик события. Пусть это будут строка комментария (она начинается с апострофа), поясняющая работу программы, и команда вывода сообщения.

Строки кода внутри программных конструкций принято писать с отступом. Это облегчает восприятие программы. Длинные строки можно разрывать на более короткие, ставя в конце этих строк знак "_".

Для удобства можно разбивать различные блоки программы пустыми строками.

Иногда при работе в редакторе кода удобно разделить окно на две части. Для этого служит горизонтальная полоска, расположенная в правой части окна, около верхней кнопки полосы прокрутки. Разделив окно, вы можете редактировать один участок кода, сверяясь с другим участком.

В левом нижнем углу окна редактора расположена пара кнопок. По умолчанию нажата кнопка Full Module View (Просмотр модуля целиком) то есть в окне редактора отображается код модуля целиком — со всеми процедурами и обработчиками событий. Если вы заняты редактированием какого-то одного модуля и не хотите отвлекаться на остальные — нажмите на кнопку Procedure View (Просмотр процедуры), которая скроет все процедуры кроме процедуры, код которой вы редактируете в настоящий момент.

Организация ввода-вывода

Ввод и вывод данных в VBA может выполняться несколькими способами: с листа Excel, с помощью диалоговых окон, с помощью пользовательской формы.

пример

Для ввода данных с листа или вывода на лист используется объект Worksheets и его методы Range или Cells.

Метод Range использует в качестве аргументов одну или две ссылки на ячейки и возвращают объект Range. Ссылки на ячейки должны быть оформлены в стиле А1 (колонка-буква-строка-число). Ссылка на единичную ячейку, использованная в качестве аргумента, возвращает объект Range для единичной ячейки. Две ссылки на единичные ячейки возвращают объект Range для прямоугольной области, заключенной между этими двумя ячейками:

X = Worksheets(“Лист1”).Range(“B1”).Value Присваиваем переменной Х значение ячейки B1 листа Лист1.
Worksheets(“Лист1”).Range(“B1”).Value = Х Выводим в ячейку B1 листа Лист1 значение переменной Х
Worksheets(“Лист1”).Range(“C1”,”D6”).Value = 2 Выводим в ячейки C1 и D6 листа Лист1 число 2
Worksheets(“Лист1”).Range(“В7:С9”).Value = 3 Выводим в диапазон ячеек “В7:С9” листа Лист1 число 3

Метод Cells, получая в качестве аргументов два целых числа, возвращают объект, содержащий единичную ячейку. Аргументы определяют номера строки и столбца выбранной ячейки.

A=Worksheets(1).Cells(1,2).Value Переменной А присвоено значение из ячейки первой строки и второго столбца первого листа.
Worksheets(1).Cells(2,2).Value= Х В ячейку второй строки и второго столбца заносится значение переменной Х

Для ввода данных с клавиатуры используется окно ввода InputBox (таблица 9), а для вывода информации на экран – окно сообщений MsgBox(таблица 10).

Таблица 9

Функция InputBox Выводит на экран диалоговое окно, содержащее сообщение, поле ввода и две кнопки OK и Cancel. Устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа string по нажатию кнопки OK, содержащее текст, введенный в поле. При нажатии кнопки Cancel возвращает пустую строку. Синтаксис: InputBox(prompt[, title] [, default]) - prompt — строковое выражение, отображаемое как сообщение в диалоговом окне. Строковое значение prompt может содержать несколько строк. Для разделения строк допускается использование символа возврата каретки (chr (13)), символа перевода строки (chr(10)) или комбинацию этих символов (chr(13) & Chr (10)); - title — строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения; - default — строковое выражение, отображаемое в поле ввода как используемое по умолчанию, если пользователь не введет другую строку. Если этот аргумент опущен, поле ввода изображается пустым.

Пример.

Имя =InputBox(“Введите Ваше имя”, “Пример окна ввода”)

На экране появится окно.

Рисунок 2 – Пример окна ввода

Переменной Имя будет присвоено значение типа String, введенное пользователем.

Следует учесть, что, поскольку введенные пользователем данные считаются текстом, при вводе числовых значений необходимо преобразовать их к одному из числовых типов данных с помощью функции преобразования типа, например val или CDbl.

X=CDbl(InputBox(“Введите значение Х”, “Пример окна ввода”, “1,678”))

В результате выполнения этой операции на экране появится окно ввода.

Рисунок 3 – Пример окна ввода

Введенное пользователем значение будет преобразовано к типу Double и присвоено переменной Х. Если пользователь не будет вводить значение, а просто нажмет кнопку OK, переменной Х будет присвоено значение по умолчанию – 1.678.

Таблица 10

Процедура MsgBox Выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа integer, указывающее, какая кнопка была нажата. Синтаксис: MsgBox(prompt[, buttons] [, title]) Аргументы: prompt — строковое выражение, отображаемое как сообщение в диалоговом окне; buttons — числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Значение по умолчанию этого аргумента равняется 0. Значения констант, определяющих число и тип кнопок используемого значка, приведены в таблицах 11—12; title — строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения

Значения параметра Buttons процедуры MsgBox, определяющие отображаемые в диалоговом окне кнопки, приведены в таблице 11:

Таблица 11

Константа Значение Отображаются кнопки
vbOKOnly   OK
VbOKCancel   OK, Отмена
VbAbortRetryIgnore   Стоп, Повтор, Пропустить
VbYesNoCancel   Да, Нет, Отмена
VbYesNo   Да, Нет
VbRetryCancel   Повтор, Отмена

При написании программ с откликом, когда нужно знать, какая кнопка диалогового окна была нажата (таблица 12), вместо возвращаемых значений удобнее использовать следующие константы VBA, которые делают код программы более читаемым и, к тому же, их легко запомнить.

Таблица 12

Константа Значение Нажатая кнопка
vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo   ОК Отмена (Cancel) Прервать (Abort) Повторить (Retry) Пропустить (Ignore) Да (Yes) Нет (No)

Пример.

N = MsgBox (“Значение переменной Х=” & X & Chr(10) & “Продолжить вычисления?”, VbYesNo, “Пример окна MsgBox”)

Если к моменту выполнения данного оператора переменная Х равнялась числу 2,14587895, то на экране появится следующее окно

Рисунок 4 – Пример окна сообщений

Пользователь может нажать одну из кнопок – Да или Нет. Если будет нажата кнопка Да, переменной N будет присвоено значение 6, если будет нажата кнопка Нет – 7. Проанализировав в дальнейшем это значение, можно выбрать одну из ветвей выполнения программы.

Часто процедура MsgBox используется в «минимальном» варианте - только для вывода сообщения, с одной кнопкой – OK. В этом случае аргументы не берутся в скобки. Например:

MsgBox “Значение переменной Х=” & X

Рисунок 5 – Пример окна сообщений

Для вывода сообщений в VBA есть встроенная команда MsgBox.

Говоря о встроенных командах, часто используют слова "процедуры" и "функции". Главное отличие процедуры от функции – то, что функция возвращает в точку вызова какие-то значения, а процедура — нет. Однако, MsgBox может работать и как функция, и как процедура, поэтому и то и другое наименование будет правомерным.

Как и многие другие команды, она имеет множество параметров. Но вам совсем необязательно помнить их, обращаясь к MsgBox. Дело в том, что редактор кода снабжен очень удобной системой подсказок. Так же редактор может автоматически завершать команды (Edit • Complete Word).

Начните вводить в редакторе текст msgbox((рис. 3.8.) причем именно строчными буквами. Если в итоге все будет введено верно, редактор автоматически преобразует msgbox в MsgBox. Если этого не произошло — возможно, вы допустили ошибку при написании имени команды. Итак, при правильном вводе команды, редактор распознает ее и предложит контекстную подсказку.

В контекстной подсказке по MsgBox можно почерпнуть информацию о структуре вызова этой функции, о тех параметрах, которые ей можно передать. Параметры — это те данные, с которыми будет работать функция. Например, мы передаем MsgBox строку для вывода в окне сообщения. В контекстной подсказке по MsgBox эта строка называется Prompt (Приглашение). Она выделена жирным шрифтом – это значит, то, что будет сейчас введено, воспримется как Prompt — то есть как текст, который будет выведен в окне сообщения. Текст, который вы передаете функции, должен быть заключен в кавычки.

Если поставить после введенного текста запятую, в контекстной подсказке жирным выделится следующий параметр. Если вы хотите оставить этот параметр в значении по умолчанию, ставьте еще одну запятую, и сможете ввести значение для очередного параметра и т.д.

Рис. 3.8. Ввод команды в окно редактора

При вызове процедур и функций им можно передавать параметры в таком виде:

MsgBox Prompt:="Привет!"

Здесь мы присвоили параметру Prompt значение "Привет", то есть наше окно должно вывести сообщение "Привет". Такой подход очень удобно использовать при вызове команд, принимающих множество параметров.

Мы не будем вводить другие параметры для окна сообщения — ограничимся только текстом и завершим ввод. Вот, что у нас получилось (рис. 3.9.).

Рис. 3.9. Код обработчика события, выводящий окно сообщения

В итоге, код обработчика события будет выглядеть так (Листинг 3.1.):

'Вывод сообщенияMsgBox ("Здравствуйте! Я ваша первая программа на VBA")

Листинг 3.1. Код для вывода сообщения (html, txt)

Запустим форму на выполнение и нажмем на кнопку — появится окно с сообщением (рис. 3.10.).

Рис. 3.10. Сообщение, появляющееся при нажатии на кнопку

Теперь поговорим об использовании свойств элементов управления в программном коде.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: