logo
SrrazOffpril_Vecher

2.2. Автоматизация операций с использованием объектов

Чтобы автоматизировать операцию в Microsoft Excel, следует сначала получить ссылку на объект с соответствующими содержимым и функциональностью, а затем воспользоваться его свойствами и методами.

2.2.1. Получение ссылки на объект

Прежде чем делать что-то с объектом, необходимо получить ссылку на него. Для этого необходимо составить выражение, которое обеспечивает доступ к этому объекту; при этом ссылку на очередной объект в иерархии можно получить через соответствующие свойства или методы – аксессоры объектов (object accessors), или просто аксесоры. При построении выражения для доступа к объекту с помощью аксессоров следует иметь в виду:

Application.Documents.Open FileName := “C:\DOCS\MYDOC.DOC”

Documents.Open FileName := “C:\DOCS\MYDOC.DOC”

Есть и другие сокращенные аксессоры, например, свойства ActiveWindow, ActiveDocument, ActiveWorsheet или ActiveCell, которые возвращают ссылку на какой-либо активный элемент приложения. Например, оператор, приведенный ниже, закрывает активный документ Word. Здесь не упоминаются ни объект Application, ни объект-набор Documents:

ActiveDocument.Close

В качестве сокращенных можно использовать любые аксессоры, содержащиеся в списке Members Of (Компонент) окна Object Browser (Просмотр объектов), когда в списке Classes (Классы) выбрана строка <global> (<глобальные>). Иначе говоря, перед их применением не нужно получать ссылку на объект, к которому они относятся, - Visual Basic определяет это сам по текущему контексту выполнения кода;

MsgBox TypeName(Workbook(1).Worksheets(1).Parent)

Функция TypeName позволяет определять тип объекта, полученного в любом выражении, а не только в тех, где используется свойство Parent;

ActivePresentation.Slides(1).Shapes(3).Object.Application

2.2.2. Вызов свойств и методов объекта

Получив ссылку на нужный объект, можно установить атрибуты этого объекта или выполнить над ним какие-то операции, используя его свойства и методы. При этом точка (.) отделяет выражение, возвращающее ссылку на объект, от имени свойства или метода объекта. Следующий оператор – он будет работать в Microsoft Excel, Word и Power Point – устанавливает левый край активного окна через свойство Left объекта Window, ссылку на который возвращает свойство ActiveWindow:

ActiveWindow.Left = 200

Свойства и методы могут принимать аргументы, управляющие их поведением. Например, в Word метод PrintOut объекта Document, ссылку на который возвращает свойство ActiveDocument, принимает аргументы, определяющие диапазон распечатываемых страниц:

ActiveDocument.PrintOut From := “3”, To := “7”

Чтобы добраться до нужных данных приложения (значения в ячейке рабочего листа Microsoft Excel или текста в документе Word), необходимо пройти несколько уровней модели объектов. В примере для Word, приведенном ниже, для перехода от объекта верхнего уровня к тексту документа используются такие свойства и методы:

Application.Documents.Item(1).Words.Item(1).Text = “The”

Поскольку свойство Documents глобальное, его можно использовать без указания Application, а так как Item – свойство или метод по умолчанию для объектов-наборов, его можно не упоминать в тексте программы. Следовательно, предыдущий оператор можно записать иначе, и при этом новый оператор будет неявно делать то же, что предыдущий – явно:

Documents(1).Words(1).Text = “The”

2.2.3. Инструментальные средства Visual Basic

В большинстве случаев определить нужный объект, свойство или метод достаточно сложно, но в приложениях Office предусмотрен ряд инструментальных средств, которые могут помочь при формировании программы для выполнения необходимых операторов. К таким инструментальным средствам можно отнести запись макроса. Данная операция транслирует последовательность действий с пользовательским интерфейсом в набор инструкций Visual Basic. Хотя полученный таким образом код дает представление о необходимых свойствах или методах, все же не стоит его использовать без редактирования, так как код, генерируемый при записи макроса, не слишком эффективен и надежен. Часто код, полученный при записи макроса, работает корректно лишь в том случае, если выделен или активизирован определенный объект. Код будет надежнее и гибче, если проход по модели объектов в нем не начинается с выделенного или активизированного объекта. Чтобы улучшить записанный код, можно воспользоваться справочной системой Visual Basic для любого приложения Office, которая содержит разделы по каждому объекту, свойству, методу и событию в модели объектов. Для того, чтобы по имени объекта определить его содержимое и функциональность, необходимо его активизировать и открыть раздел справочной системы с подробной информацией о нем. Разделы справочной системы, посвященные конкретным объектам, содержат:

В разделах справочной системы по отдельным свойствам или методам описывается содержимое или функциональность, доступ к которым обеспечивает конкретное свойство или метод, а также приведены ссылки на примеры их использования. Можно скопировать код из раздела справочной системы (в буфер обмена) и вставить его в свой модуль.

У каждого приложения office есть файл – библиотека объектов или библиотека типов; в нем содержится информация об объектах, свойствах, методах, событиях и встроенных константах, предоставляемых данным приложением. Для просмотра содержимого файла и описываемой им модели объектов можно использовать средство просмотра объектов – Object Browser. Для просмотра полного списка объектов из всех библиотек, на которые есть ссылки, предусмотрена строка верхнего списка <All Libraries> (<Все библиотеки>), а для просмотра объектов из отдельной библиотеки следует выбрать в том же списке строку, содержащую название соответствующего приложения. Если такая библиотека отсутствует в списке, необходимо создать ссылку на нее в диалоговом окне References (Ссылки), которое открывается одноименной командой из меню Tools (Сервис).

В списке Classes (Классы) отображаются имена объектов и перечислимых типов из всех библиотек, на которые есть ссылки. Класс – это тип, или описание объекта, а объект – фактический экземпляр класса. Активизировав имя объекта в списке Classes (Классы), в списке Members Of (Компонент) отображаются все свойства, методы и события, связанные с данным объектом. Событие – это действие, распознаваемое объектом, например, щелчок мыши или нажатие клавиши. Активизировав имя свойства или метода в списке Members Of (Компонент), можно получить справку по выделенному ключевому слову с помощью кнопки F1 или в нижней секции окна Object Browser (Просмотр объектов), в которой сообщается синтаксис, тип свойства («только чтение» или «чтение/запись»), имя библиотеки, к которой относится объект, и тип данных, возвращаемых свойством или методом. Если какое-то слово в нижней секции выделено зеленым цветом и подчеркнуто, значит это ссылка, с помощью которой можно получить более подробную информацию. Ссылки позволяют выяснить, как добраться до того или иного объекта. Нижняя секция полезна и тех случаях, когда неизвестен точный синтаксис – имена и порядок аргументов – данного свойства или метода, а также какие аргументы необязательны.

При наличии ссылок на несколько библиотек, содержащих определенные объекты, в диалоговом окне Object Browser (Просмотр объектов) появляются дублирующие друг друга имена – если в верхнем списке выбрана строка <All Libraries> (<Все библиотеки>). Различить дубликаты можно, выделив одни из них и обратившись к нижней секции окна, где будет показано, к какой библиотеке относится выделенное ключевое слово.

В среду разработки встроено множество средств, помогающих писать выражения и операторы Visual Basic. Для включения и отключения этих средств в редакторе Visual Basic (Microsoft Excel, Word или Power Point) следует пометить (снять пометку) соответствующие флажки (таблица 2.1) в разделе Code Settings (Параметры программирования) на вкладке Editor (Редактор) диалогового окна Options (Параметры), которое открывается с помощью одноименной команды мены Tools (Сервис).

Таблица 2.1

Назначение флажков диалогового окна Options (Параметры)

Параметр

Действие

Auto Syntax Check (Проверка синтаксиса)

Указывает Visual Basic, надо ли автоматически проверять синтаксис после ввода очередной строки кода

Require Variable Declaration (Явное описание переменных)

Определяет, требуется ли явное объявление переменных в модулях. Если этот флажок активен, в раздел общих объявлений каждого нового модуля автоматически вставляется оператор Option Explicit

Auto List Member (Список компонентов)

Открывает список и информацией, которая позволяет логически закончить оператор в текущей позиции курсора ввода

Auto Quick Info (Краткие сведения)

Выводит информацию о функциях и их параметрах в процессе набора текста

Auto Data Tips (Подсказки значений данных)

Отображает значение переменной, поверх которой находится курсор мыши. Это средство действует только при пошаговом исполнении программы

Auto Indent (Автоотступ)

При нажатии клавиши Enter автоматически повторяет отступ предыдущей строки. Таким образом, все последующие строки сдвигаются вправо на одно и то же расстояние. Для удаления автоотступов используется клавиша Backspace

Tab Width (Интервал табуляции)

Устанавливает размер табулятора в диапазоне от 1 до 32 пробелов (по умолчанию – 4)

Эти инструменты автоматически отображают информацию и предоставляют соответствующие варианты выбора на каждом этапе ввода выражения или оператора. Кроме того, в построении выражений в любой момент помогут такие команды в контекстном меню для модуля, как List Properties/Methods (Список свойств/методов), List Constants (Список констант), Quick Info (Сведения), Parameter Info (Параметры) или Complete Word (Завершить слово).

Когда в одном приложении создается объектная переменная, ссылающаяся на объект другого приложения, Visual Basic должен проверить, что этот объект существует, и что его свойства и методы заданы правильно. Такая проверка называется связыванием (binding). Связывание может проходить в период выполнения программы (позднее связывание) или на этапе компиляции (ранее связывание). Программа с поздним связыванием выполняется медленнее, чем программа с ранним связыванием. Кроме того, многие вспомогательные средства, встроенные в среду разработки, работают только при использовании раннего связывания.

Чтобы добиться раннего связывания кода, необходимо:

Dim wdObject As Document

Не следует объявлять ее как универсальный тип Object:

Dim wdObject As Object

Dim wndXL As Excel.Window

Dim wndWD As Word.Window

Если свойство или метод, применяемые для получения ссылки на объект, возвращают не конкретный объектный тип, а универсальный тип Object, следует пойти на дополнительные меры, чтобы гарантировать для программы раннее связывание и возможность работы со средствами, помогающими в написании операторов. Например, в Microsoft Excel метод Item объекта Worksheets возвращает тип Object, а не Worksheet, поэтому следует явно объявить переменную типа Worksheet и присвоить ей значение выражения, возвращающего ссылку на объект Worksheet:

Dim testWS As Worksheet

Set testWS = Workbooks(1).Worksheets(1)

После ввода объектной переменной и следующей за ним точки, команда List Properties/Methods (Список свойств/методов) предложит на выбор свойства и методы объекта Worksheet, на который ссылается эта переменная.