Иерархия объектов MS Excel
Объекты Excel расположены на разных уровнях. Некоторые из них включены в другие объекты. Уровни удобно представлять в виде иерархической структуры (Рис. 1.1). Имена семейств написаны в прямоугольниках, а имена объектов семейств заключены в круглые скобки.
Верхняя ступень иерархии Excel занята единственным объектом – Application. Он представляет собой приложение Excel и располагается надо всеми остальными объектами.
На второй ступени находятся пятнадцать объектов, среди которых стоит выделить следующие:
Window – открывает доступ к различным окнам Excel;
Workbook – представляет файл рабочей книги;
WorksheetFunction – используется для вызова функции рабочего листа из программы.
Третью, четвертую и пятую ступени занимают различные объекты, открывающие доступ к возможностям, предоставляемым объектами второй ступени.
Рис. 1.1. Иерархия объектов MS Excel
Рис. 1.1. Иерархия объектов Excel (окончание)
Каким образом иерархия объектов влияет на способ написанияпрограммы VBA?
|
|
Предположим, вы пишете подпрограмму для задания свойства Value объекта Range, представляющего первую ячейку первого рабочего листа первой книги Excel. Из иерархических схем видно, что он располагается «под» объектом Worksheet, который, в свою очередь, подчиняется последовательно объектам Workbook и Application. Поэтому полная запись пути к нему выглядит так[7]:
Application.Workbooks(l).Worksheets(l). _ Range("A1").Value = 1
Хотя эта инструкция будет выполнена корректно, далеко не всегда при вызове метода или задании свойства нужно указывать генеалогическое древо объекта полностью. Количество объектов-предков, которые необходимо перечислять в программе, зависит от конкретных обстоятельств.
Инструкция, показанная выше, будет выполнена в любом месте программы и всегда присвоит свойству Value первой ячейки A1 первого листа первой книги значение 1, поскольку в ней путь к объекту Range указан полностью, начиная с объекта Application. Но если код выполняется в Excel, что чаще всего и бывает, ссылка на объект Application не обязательна. При отсутствии такой явной ссылки VBA будет считать, что программа выполняется для объекта, представляющего Excel, поэтому обращение к нему из инструкции можно убрать:
Workbooks(1).Worksheets(1).Range("A1).Value = 1
Далее, если нужная вам книга является активной, то ссылку на неё можно опустить, и тогда команда запишется так:
Worksheets(1).Range("A1).Value = 1
То же самое относится к рабочему листу: если в рабочей книге всего один лист или первый лист является активным, то ссылку на первый лист можно убрать, и тогда инструкция запишется так:
Range("A1").Value = 1
Некоторые объекты Excel имеют «свойство по умолчанию». У объекта Range свойством по умолчанию является Value (значение), что позволяет еще более сократить код[8]:
|
|
Range("A1") = 1
Для того чтобы ссылаться на активную книгу, воспользуйтесь ссылкой на объект Workbook под именем ActiveWorkbook:
ActiveWorkbook.Worksheets(1).Range("A1").Value = 1
Эта команда изменяет значение в ячейке активной рабочей книги (необязательно первой).
Ссылка ActiveSheet, подобно ссылке ActiveWorkbook, служит для обращения к активному рабочему листу. Инструкция для изменения свойств активного листа имеет следующий вид:
ActiveSheet.Range("A1").Value = 1
Для обращения к активному диапазону, т.е. к группе выделенных ячеек, используется также свойство Selection объекта Application. Однако оно может ссылаться не только на объекты Range. При выполнении программы VBA определяет значение свойства Selection в соответствии с выделенным в данный момент объектом. Поэтому свойства по умолчанию (из-за разных объектов) нет.
Selection.Value = 1
Выполнение этой команды вызывает присвоение значения выделенному диапазону, будь это Range("Al")или Range("G7:N25").