Глава 16. VBA-программирование в Excel.
Глава 16. VBA-программирование в Excel.
В этой главе ...
~ Что такое объектная модель Excel
~ Управление ячейками с использованием объектов диапазонов
~ Создание собственных функций для использования в формулах рабочих листов
~ Использование встроенных функций Excel в VBA-коле
~ Работа с событиями Excel
Каждого, кто когда-либо писал формулы рабочих листов, можно считать в некотором роде программистом; поэтому не следует относиться к VBA, как к чему-то запредельному. Скорее всего, после некоторой работы с редактором Visual Basic вы обнаружите, что писать VBA-код, на самом деле, удобнее, чем составлять формулы непосредственно в рабочем листе; VBA предоставляет больший простор для деятельности в окне редактирования кода и позволяет вносить комментарии, что бывает очень полезным.
Кроме того, VBA может служить мощным инструментом для создания настраиваемых приложений, базирующихся на таблицах, способных выполнять вычисления и форматирования, которые без них просто не реальны. Но прежде чем стать профессионалом в использовании кодов Excel, чему способствует представленный ниже материал, следует ознакомиться с основами VBA, которые даются в первых трех разделах.
Знакомство с объектной моделью Excel
Прежде чем приступить к написанию VBA-кода для Excel, необходимо составить представление об иерархии объектов Excel и о том. как определять их в написанном коде. В самом верху иерархии находится объект Application (Приложение), отвечающий за функционирование всей программы Excel.
Для увеличения скорости работы многих VBA-программ следует отключить обновление экрана. По умолчанию Excel отображает каждое изменение в рабочей книге, сделанное в ходе выполнения VBA-кода. Это приводит к существенному снижению быстродействия. Для отключения такого режима работы Excel необходимо воспользоваться функцией ScreenUpdating (Обновление экрана) объекта Application:
Application . ScreenUpriatirig = False
Не забудьте в конце процедуры восстановить значение True для свойства ScreenUpdating, в противном случае пользователь не сможет увидеть на экране полученный результат.
При использовании свойства Screer.Upcating необходимо явно указывать имя объекта Application. Однако в большинстве случаев свойства объекта Application можно использовать напрямую. Например, свойство ActiveSheet объекта Application относится к рабочему листу или диаграмме, активной в текущий момент (безусловно, в книге, активной сейчас). Для обращения в коде к такому листу вместо записи Application .ActiveSheet можно использовать просто ActiveSheet. Коллекция Workbooks объекта Application содержит все рабочие книги, открытые в данный момент.
Для идентификации определенной рабочей книги используйте ее имя, заключенное в кавычки. Вот пример активизации отдельной рабочей книги:
Workbooks("Сводная статистика продаж.xls").Activate
Конечно же, рабочие листы также являются полноправными объектами. Они принадлежат коллекции Worksheets, и их идентификация должна проводиться таким же образом. Выражение Worksheets ( "ЛистЗ" ) указывает на лист с именем ЛистЗ. Аналогично, отдельный объект Chart для диаграммы, находящейся на отдельном листе, является членом коллекции Charts. Обращение к ней выполняется с помощью выражения вроде Charts ("Parts Chart") . Приемы работы с диаграммами, внедренными в рабочий лист, несколько отличаются, и приемы написания кода для них являются объектом рассмотрения данной книги.
Отображение рабочих книг можно изменить с помощью объектов Window (Окно). Объекты Window, которые иногда используются и для изменения содержимого рабочей книги, являются членами коллекции Windows объекта Application. Ссылка на окно осуществляется указанием в качестве индекса в коллекции Windows имени файла, содержащего рабочую книгу:
Windows("Кривая продаж игрушек.xls")
Если для одной рабочей книги открыто несколько окон, необходимо после имени рабочей книги через двоеточие указать номер окна, например: Windows ("Кривая продаж иг ру ше к.x l s:2").