В этом разделе приводится дополнительная информация об объектах и коллекциях объектов.
Работая с кодом VBA, следует четко понимать назначение объектов и объектной модели Excel. Целесообразнее рассматривать объекты с точки зрения иерархической структуры. На вершине объектной модели находится объект Application (в данном случае – Excel). Но если вы программируете в VBA, запуская VBE в Microsoft Word, то объектом Application будет выступать Word.
Иерархия объектов
Объект Application (в рассматриваемом случае Excel) содержит другие объекты. Ниже приведено несколько примеров объектов, которые находятся в объекте Application:
• Workbooks (коллекция всех объектов Workbook – рабочих книг);
• Windows (коллекция всех объектов Window – окон);
• Addins (коллекция всех объектов Addin – надстроек).
Одни объекты могут содержать другие объекты. Например, коллекция Workbooks состоит из всех открытых объектов Workbook, а объект Workbook включает другие объекты. Некоторые из них представлены ниже:
• Worksheets (коллекция объектов Worksheet – рабочих листов);
• Charts (коллекция объектов Chart – диаграмм);
• Names (коллекция объектов Name – имен).
Каждый из этих объектов, в свою очередь, может содержать другие объекты. Коллекция Worksheets состоит из всех объектов Worksheet рабочей книги Workbook. Объект Worksheet включает другие объекты, среди которых есть следующие:
• ChartObjects (коллекция объектов ChartObject – элементов диаграмм);
• Range – диапазон;
• PageSetup – параметры страницы;
• PivotTables (коллекция объектов PivotTable – сводных таблиц).
Может быть, вы пока не готовы правильно воспринять подобную концепцию, но со временем наверняка поймете, что иерархия объектов вполне логична и хорошо структурирована. Вся объектная модель Excel схематически изображена в электронной справочной системе.
О коллекциях
Одной из ключевых концепций в программировании на языке VBA является коллекция. Коллекция – это группа объектов одного класса (и сама коллекция также является объектом). Как указывалось выше, Workbooks – это коллекция всех открытых в данный момент объектов Workbook. Worksheets – коллекция всех объектов Worksheet, которые содержатся в конкретном объекте Workbook. Можно одновременно управлять целой коллекцией объектов или отдельным объектом этой коллекции. Чтобы сослаться на один объект из коллекции, введите название или номер объекта в скобках после названия коллекции.
Worksheets(“Лист1”)
Если лист Лист1 – это первый рабочий лист в коллекции, то можно использовать следующую ссылку:
Worksheets(1)
Если в объекте Workbook нужно сослаться на второй рабочий лист, ссылка указывается в формате Worksheets(2) и т.д. Коллекция Sheets состоит из всех листов рабочей книги, которые могут представлять собой рабочие листы или листы диаграмм. Если Лист1 – первый лист в рабочей книге, ссылка на него имеет следующий вид:
Sheets(1)
Ссылки на объекты
Если вы обращаетесь к объекту в VBA, то в ссылке на него вводятся названия всех расположенных выше в иерархической структуре объектов, разделенных точкой (оператор-точка). Что делать, если в Excel открыты две рабочие книги и в обеих имеется рабочий лист с названием Лист1? В этом случае в ссылке необходимо указать контейнер требуемого объекта.
Workbooks(“Книга1”).Worksheets(“Лист1”)
Без указания рабочей книги редактор Visual Basic искал бы Лист1 в активной рабочей книге.
Чтобы сослаться на определенный диапазон (например, на ячейку А1) на рабочем листе с названием Лист1 в рабочей книге Книга1, можно использовать следующее выражение:
Workbooks(“Книга1”).Worksheets(“Лист1”).Range(“A1”)
Полная ссылка из предыдущего примера включает объект Application и выглядит так:
Application.Workbooks(“Книга1”).Worksheets(“Лист1”).Range(“A1”)
Однако в большинстве случаев можно опускать объект Application в ссылках (кроме него использоваться больше нечему). Если объект Книга1 – это активная рабочая книга, то опустите ссылку на нее и запишите рассматриваемое выражение следующим образом:
Worksheets(“Книга1”).Range(“A1”)
Если Лист1 – активный рабочий лист, можно еще более упростить выражение:
Range(“A1”)
В Excel отсутствует объект отдельной ячейки. Отдельная ячейка представляет собой объект Range, состоящий из одного элемента.
Простые ссылки на объекты (как в приведенных примерах) ничего не выполняют. Чтобы выполнить действие, прочтите или измените свойства объекта или задайте метод, который выполняется по отношению к объекту.