- •2.1. Алфавит и словарь языка
- •2.2. Переменные
- •2.3. Константы
- •2.4. Строковые переменные
- •2.5. Массивы
- •2.6. Пользовательские типы данных
- •2.7. Операции VBA
- •2.8. Объектная модель Excel
- •2.8.1. Свойства и методы объектов
- •2.8.2. Отображение объектной модели Excel
- •2.8.2.1. Иерархия объектной модели
- •2.8.2.2. Ссылка на объекты в коде VBA
- •2.8.3. Работа с объектами
- •2.8.3.1. Задание свойств объекта
- •2.8.3.2. Использование методов объекта
- •2.8.3.3. Переменные-объекты
- •2.8.3.4. Коллекции
- •2.8.3.5. Метод Add
- •2.8.3.6. Свойство Count
- •2.8.4. Свойства и методы основных объектов Excel
- •2.8.4.1. Объект Application
- •2.8.4.2. Объект Worksheet
- •2.8.4.3. Объект Range
- •2.8.5. Просмотр объектов
- •2.8.6. Использование справочной системы
- •2.8.6.1. Использование функциональной клавиши F1
- •2.8.6.2. Использование помощника
- •2.9. Ввод и вывод данных
- •2.9.3. Метод InputBox
- •2.9.4. Объединение текстовых строк
- •2.10. Концепция событий Excel
- •2.10.1. Типы событий Excel
- •2.10.2. События объекта Workbook
- •2.10.3. События объекта Worksheet
- •2.10.4. События объекта Application
- •2.10.5. События объекта UserForm
- •2.10.6. События, не связанные с конкретными объектами
- •2.10.6.1. Метод OnKey
- •2.10.6.2. Событие OnTime
- •2.11. Формы пользователя
- •2.11.1. Свойства, методы и события экранных форм
- •2.11.1.1. Некоторые свойства форм
- •2.11.1.2. Некоторые методы форм
- •2.11.1.3. Некоторые события форм
- •2.11.2. Элементы управления
- •2.11.2.1. Элемент управления Label (Надпись)
- •2.11.2.1.1. Окно свойств формы
- •2.11.2.2. Элемент управления CommandButton (Кнопка)
- •2.11.2.3. Элемент управления TextBox (Текстовое поле)
- •2.11.2.4. Элемент управления ComboBox (комбинированный список)
- •2.11.2.5. Элемент управления ListBox (список)
- •2.11.2.6. Элемент управления CheckBox (Флажок)
- •2.11.2.7. Элемент управления ToggleButton (Выключатель)
- •2.11.2.8. Элемент управления OptionButton (Переключатель)
- •2.11.2.9. Элемент управления Image (Рисунок)
- •2.11.2.12. Элемент управления RefEdit (Поле со свёртыванием)
- •2.11.2.13. Элементы управления на рабочем листе
- •2.12. Инструкции VBA
- •2.12.1. Оператор присваивания
- •2.12.2. Инструкция Set
- •2.12.3. Циклы
- •2.12.3.1. Инструкция For… Next
- •2.12.3.2. Инструкция While…Wend
- •2.12.3.3. Инструкция Do... Loop
- •2.12.3.4. Инструкция For Each…Next
- •2.12.4. Инструкции перехода
- •2.12.4.1. Инструкция условного перехода If…Then…Else
- •2.12.4.2. Инструкция Select…Case
- •2.12.4.3. Инструкция безусловного перехода GoTo
- •2.12.4.4. Инструкции перехода к обработчику ошибок On Error
- •2.12.4.5. Инструкции прерывания выполнения блока Exit
- •2.13. Функции VBA
- •2.13.1. Встроенные функции
- •2.13.1.1. Математические функции
- •2.13.1.2. Функции преобразования данных
- •2.13.1.3. Функции даты и времени
- •2.13.1.4. Строковые функции
- •2.13.1.5. Примеры использования функций VBA
- •2.13.1.5.1. Удаление ненужных символов
- •2.13.1.5.2. Определение длины строки
- •2.13.1.5.3. Сравнение и поиск строк
- •2.13.1.5.4. Выделение части строки
- •2.13.1.5.5. Форматирование значений данных
- •2.13.2. Функции, определённые пользователем
- •2.14. Файлы VBA
- •2.14.1. Типы файлов в VBA
- •2.14.2. Открытие и закрытие файла
- •2.14.3. Ввод данных в файл последовательного доступа
- •2.14.4. Вывод данных из файла последовательного доступа
- •2.14.5. Работа с файлом произвольного доступа
- •2.15. Создание процедуры
- •2.16. Выполнение процедуры
- •2.17. Сохранение процедуры
- •2.18. Запись последовательности действий пользователя
- •2.19. Просмотр кода макроса
- •3.1. Тестирование и отладка как этап разработки приложений
- •3.1.1. Отладка
- •3.1.1.1. Режим останова
- •3.1.1.2. Использование окна Immediate
- •3.1.1.2.1. Просмотр значений в окне Immediate
- •3.1.1.3. Пошаговое выполнение программ
- •3.1.2. Исправление ошибок
- •Библиографический список
- •Оглавление
46
2.10. Концепция событий Excel
Событие представляет собой действие, распознаваемое объектом, например, щелчок мышью или нажатие клавиши, перемещение мыши или выход из программы, для которого можно запрограммировать отклик, т.е. реакцию объекта на произошедшее событие. В этом случае говорят, что процедура обрабатывает событие. Процедура обработки события – это специально именованная процедура, которая запускается при возникновении определённого события.
Excel реагирует на большое количество событий. При возникновении определённого события Excel может запускать указанную процедуру обработки. Примерами событий, распознаваемых Excel, являются:
открытие и закрытие рабочей книги;
активизация окна;
активизация или деактивизация рабочего листа;
ввод данных в ячейку или редактирование данных в ячейке;
сохранение рабочей книги;
щелчок на объекте;
обновление данных на диаграмме;
нажатие определённой клавиши или сочетание клавиш;
двойной щелчок на ячейке;
наступление определённого времени суток.
Обработать можно события следующих объектов Excel:
Application
WorkBook
WorkSheet
Chart
UserForm.
2.10.1. Типы событий Excel
Excel в процессе работы может управлять большим количеством событий, которые могут быть классифицированы следующим образом.
События объекта Application происходят в приложении Excel. Например, событие WorkbookBeforeClose, возникает при закрытии одной из рабочих книг.
События объекта WorkBook происходят в конкретной рабочей книге. Например, событие Open, возникает при открытии или создании рабочей книги.
События объекта WorkSheet происходят в конкретной рабочем листе. Например, событие Change, возникает при изменении содержимого ячейки листа.
События объекта UserForm происходят в диалоговом окне UserForm или в одном из объектов этого диалогового окна. Например, элемент управления CommandButton, расположенный в диалоговом окне UserForm, поддерживает событие Click, возникающее при щелчке на этой кнопке.
47
События, не связанные с объектами: OnTime и OnKey. Эти события работают иначе, чем остальные.
Каждая процедура обработки события имеет своё предопределённое имя, задаваемое в соответствии со следующим форматом
Объект_Событие
т.е. состоит из имени объекта и наименования события, разделённых символом “подчёркивание” (_).
Примеры
WorkBook_Open
Workbook_SheetActivate
Worksheet_SelectionChange
Worksheet_BeforeRightClick
Процедуры событий объекта WorkBook хранятся в модуле ЭтаКнига, объекта WorkSheet – в модулях Лист1, Лист2, Лист3, объекта UserForm – в модулях UserForm (Рис. 10).
Рис. 10. Объекты Microsoft Excel
В отличие от других событий, доступ к событиям OnTime и OnKey осуществляется при помощи методов OnTime и OnKey объекта Application. Они программируются при помощи инструкций, расположенных в модуле общего назначения Module1, Module2,…, Module№.
2.10.2. События объекта Workbook
События объекта Workbook происходят в пределах определённой рабочей книги. Их количество равно 23. Ниже приведена таблица, в которой перечислены наиболее часто используемые события объекта Workbook и краткое их описание.
Таблица события объекта Workbook
Событие |
Действие, к которое приводит к возникновению события |
BeforeClose |
Начало закрытия рабочей книги |
BeforePrint |
Перед началом печати рабочей книги |
BeforeSave |
Перед сохранением рабочей книги |
Open |
При открытии рабочей книги |
SheetActivate |
При активизации рабочего листа |
48
Список событий можно просмотреть, как показано на рис. 11, 12 и 13.
Для получения справки по событию нужно ввести его имя в поле справки “Ведите вопрос”, например, BeforePrint, нажать клавишу Enter и выбрать BeforePrint Event. На экран будет выведена справка по этому событию.
BeforePrint Event
See Also Applies To Example Specifics
Occurs before the workbook (or anything in it) is printed.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Cancel False when the event occurs. If the event procedure sets this argument to True, the workbook isn't printed when the procedure is finished.
Example
This example recalculates all worksheets in the active workbook before printing anything.
Private Sub Workbook_BeforePrint(Cancel As Boolean) For Each wk in Worksheets
wk.Calculate Next
End Sub
Код процедуры обработки события можно ввести полностью вручную. Однако объявление этой процедуры лучше сделать при помощи редактора VBE. Для этого нужно открыть редактор Visual Basic (клавиши
Alt + F11 или кнопка ), выбрать двойным щелчком мыши из Microsoft Excel Objects модуль ЭтаКнига (или Лист1 (2, 3)) и из раскрывающегося списка справа сверху General выбрать объект Workbook (или Worksheet) (рис.11) и щёлкнуть по нему. Появится диалоговое окно со “скелетом” процедуры обработки события Open() (рис. 12).
Рис. 11. Выбор объекта для обработки события рабочей книги
49
Рис. 12. “Скелет” процедуры обработки события Open()
Рис. 13. Выбор события SheetActive
Для выбора другого события нужно раскрыть список событий и выбрать его, например, SheetActive (рис. 13).
На экран будет выведено диалоговое окно со “скелетом” процедуры Workbook_SheetActivate (рис.14).
Рис. 14. Процедуры Workbook_Open и Workbook_SheetActivate
Процедуру Workbook_Open, если она не нужна, следует удалить.
50
Предположим, что процедура Workbook_SheetActivate должна выдавать сообщение об имени активизируемого рабочего листа. Ниже приведён текст такой процедуры и диалоговое окно при активизации Листа3.
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
MsgBox ("Активный лист-" & Sh.Name)
End Sub
Необходимо помнить, что процедуры обработки событий объекта Workbook должны находиться в модуле ЭтаКнига (), а объекта Worksheet – в модулях Лист1, Лист2, Лист3.
Как видно из рис. 14, процедуры обработки событий могут иметь аргументы. Аргумент Sh в приведённой выше процедуре представляет активизированный рабочий лист. В данном случае переменная Sh имеет тип
Object.
Примечание
Как для любой переменной VBA в приведённом выше примере вместо Sh можно использовать любое другое допустимое имя, например, Имя_Листа.
Некоторые процедуры обработки событий используют аргумент Cancel с типом данных Boolean. В приводимой ниже процедуре значение аргумента Cancel, которое передаётся в процедуру, равно False, т.е. печать разрешена (Cancel= False означает, что отмена не действует). Однако можно установить это значение равным True, что приведёт к отмене печати.
Private Sub Workbook_BeforePrint (Cancel As Boolean)
Сообщение = "Бумага загружена?"
Ответ = MsgBox(Сообщение, vbYesNo, "Печать") If Ответ = vbNo Then Cancel = True
End Sub
Процедура Workbook_BeforePrint выполняется при выдаче команды на печать. Она отображает окно сообщения, приведённое ниже.
если пользователь щёлкнет по кнопке Нет (константа vbNo), то аргумент Cancel примет значение True, и печать будет отменена.