Компоненты моделей объектов MS Office
14.3. Свойства, методы и события объектов
Объекты приложения обладают определенными свойствами, методами и событиями. Свойства отражают способы хранения данных в объектах или содержат характеристики объекта. Свойства могут возвращать вложенные объекты, поддерживая таким образом иерархию объектов MS Office. Методы осуществляют действия с объектами. Многие объекты реагируют на события. Большая часть событий связана с действиями пользователя, например, открытие файла или изменение данных. Если написать программу, обрабатывающую события, то приложение будет реагировать на действия пользователя.
Различные коллекции объектов имеют общие методы и свойства, но параметры вызова методов могут различаться.
Свойства объекта делятся на две группы:
- свойства-участники (accessors), представляющие вложенные объекты;
- терминальные свойства (terminals), задающие характеристики объекта или его состояние.
Свойства-участники позволяют получить доступ к объекту, находящемуся на любом уровне вложенности. Например, для MS Excel запись Application.ActiveWorkbook осуществляет доступ к активной рабочей книге, а запись ActiveWorkbook.ActiveSheet – к активному листу активной рабочей книги. Изменение значений терминальных свойств – это один из способов изменить внешний объекта.
Свойства имеют статус:
- Read-Write (далее R/W) предполагает возможность изменения свойства;
- Read-Only (далее R/O) означает, что доступно только тестирование значения свойства.
Статус и типы значений свойств объектов можно уточнить, используя справочную систему (Help или Object Browser). Некоторые свойства являются общими для многих объектов и для разных объектов могут иметь разный статус, как, например, свойства Height, Width, являющиеся свойствами интервалов, окон и приложения.
Свойства объектов изменяются при помощи оператора присваивания или под влиянием методов. В качестве значений свойств могут использоваться константы приложения, например, константа xlCalculationManual устанавливает ручной пересчет таблицы Excel.
Синтаксис операторов присваивания object.property=expression
- object – ссылка на объект, над которым совершается действие;
- property – название свойства, значение которого необходимо изменить;
- expression – выражение, представляющее новое значение свойства объекта.
Каждое свойство может принимать значения только определенного типа, например, "текстовый", "числовой" или "дата", поэтому тип результата вычисления выражения должен соответствовать типу свойства, т. е. если свойство является числовым, то и результат вычисления выражения должен быть числом или должен корректно преобразовываться в число. Например, оператор ActiveCell.Font.Bold="b" является ошибочным, так как свойство Bold имеет тип Boolean и может принимать значения только True или False (1 или 0).
При помощи оператора присваивания можно сохранить значение свойства в переменной, при этом тип переменной должен соответствовать типу значения свойства. Значение свойства может использоваться как часть условного выражения. В таких случаях говорят о возврате значения свойства.
Синтаксис оператора, возвращающего значение свойства:
variable=object.property
- variable – переменная или свойство некоторого объекта;
- object – ссылка на объект, свойство которого запоминается или тестируется;
- property – название свойства, значение которого необходимо получить.
Методы – это действия, которые выполняются с объектом. Например, если необходимо очистить интервал ячеек, то используется метод Clear для объекта Range. Очевидно, что методы могут влиять на значения свойств, например, метод Clear изменяет свойство Value интервала ячеек, устанавливая его в Empty.
Подобно процедурам, методы могут принимать аргументы. Функции VBA и методы Application могут иметь одинаковые имена, но различные аргументы, например, функция InputBox класса Interaction и метод InputBox класса Application.
Каждый объект имеет свои собственные методы. Некоторые методы являются уникальными, а другие встречаются у нескольких объектов. Например, метод Delete может удалять графический объект и рабочий лист рабочей книги Excel.
Синтаксис вызова метода без аргументов – object.method.
Например, ActiveCell.Justify.
Синтаксис вызова метода с аргументами:
- variable=object.method(arguments) – функциональная форма вызова (аргументы указываются в скобках через запятую после названия метода). Функциональная форма вызова метода используется, если необходимо сохранять значение, возвращаемое методом;
- object.method arguments – операторная форма вызова (аргументы записываются через пробел после названия метода). Операторная форма вызова метода используется, если не нужно сохранять возвращаемое методом значение.
Аргументы можно задавать, используя позиционное или произвольное расположение. Во втором случае используются поименованные аргументы.
Событие, например, – это нажатие командной кнопки в диалоге, закрытие или активизация окна документа.
14.4. Обращение к объекту
Контейнеры
Объекты приложения могут содержать в себе объекты разных типов. Например, рабочая книга Excel может содержать один или несколько рабочих листов и листов диаграмм. Когда объект одного типа находится внутри объекта другого типа, говорят о контейнере (container), в котором содержится объект.
Самый старший контейнер объектов – это приложение Application. Приложение в Excel суть контейнер для всех открытых рабочих книг, и в то же время оно содержит такой глобальный объект, как строка меню, который доступен любой рабочей книге. Рабочий лист представляет пример того, что объект может быть частью нескольких контейнеров или коллекций одновременно: он входит в рабочую книгу, с одной стороны, а с другой стороны – является частью коллекции Sheets и коллекции Worksheets.
Рассмотрение объекта в качестве контейнера позволяет уточнить, сославшись на контейнер, с каким именно объектом производится действие в процедуре. Например, для Excel, если в рабочей книге имеются два рабочих листа Sheet1 и Sheet2, то запись Worksheets("Sheet1").Range("A1") указывает на ячейку A1 рабочего листа Sheet1, а запись Worksheets("Sheet2").Range("A1") указывает на ячейку A1 рабочего листа Sheet2.
Ссылка на объект
Объект в VBA указывается при помощи ссылки. Запись Workbooks ("cross").Worksheets("Sheet2") указывает на объект Excel, являющийся листом с именем Sheet2 в рабочей книге cross, отличая его таким образом от листа с тем же именем, но в другой рабочей книге. Свойства и методы объекта указываются через точку после ссылки на объект.
Ссылка на объект состоит из имени контейнера и названия свойства-участника и может состоять из нескольких спецификаторов (имен контейнеров), отделенных друг от друга точкой. Такая запись отражает иерархию объектов и позволяет точно указать конкретный объект. Например, оператор Application.ActiveWorkbook.Close закрывает активную рабочую книгу Excel. Свойство ActiveWorkbook является свойством объекта Excel, а Application определяет активную рабочую книгу.
Для объектов Excel, относящихся к классу globals (например, активная рабочая книга, активная ячейка рабочего листа, константа), спецификатор Application можно опустить. Предыдущий оператор можно записать как ActiveWorkbook.Close. Оператор ActiveCell.Value="False" устанавливает в False значение активной ячейки, а оператор ActiveSheet.Range("A1").Value="The First" сохраняет заданное значение в ячейке A1 активного рабочего листа.
Ссылка на объект коллекции – это название коллекции, после которого в скобках указывается индекс объекта или его имя в кавычках. Например, для Excel ссылка Workbooks(1) выбирает первую из открытых рабочих книг, а Workbooks("budget") ссылается на рабочую книгу с именем "budget".
Для PowerPoint ссылка на первый объект коллекции слайдов активной презентации имеет вид ActivePresentation.Slides(1).
Оператор With
В VBA перед обращением к каждому из методов или свойств объекта требуется наличие ссылки на объект. Конструкция With…End With позволяет применить последовательность операторов к объекту, указав ссылку на него только один раз в операторе With. Благодаря этому программа становится менее громоздкой, освобождаясь от повторений ссылки на объект.
Синтаксис оператора:
With Object [statements] End With
- Object – имя объекта;
- statements – последовательность операторов, выполняемых с объектом.
Первая строка этой структуры идентифицирует объект, с которым будут производиться действия. В последующих операторах используются свойства и методы идентифицированного объекта. Каждый оператор внутри блока statements начинается с точки. Оператор End With является закрывающей скобкой для оператора With.
Использование объектных переменных
Чтобы получить доступ к свойствам или методам объекта, можно использовать два способа: прямое указание на объект (ссылку) и объектную переменную, которая хранит адрес, указывающий на объект. Объектная переменная занимает 4 байта.
Применение объектных переменных улучшает читабельность программы, уменьшает время выполнения программы, т. к. при каждом выполнении оператора, обращающегося к объекту, не придется проходить полную цепочку иерархии объектов.