2.2. Автоматизация операций с использованием объектов
Чтобы автоматизировать операцию в Microsoft Excel, следует сначала получить ссылку на объект с соответствующими содержимым и функциональностью, а затем воспользоваться его свойствами и методами.
2.2.1. Получение ссылки на объект
Прежде чем делать что-то с объектом, необходимо получить ссылку на него. Для этого необходимо составить выражение, которое обеспечивает доступ к этому объекту; при этом ссылку на очередной объект в иерархии можно получить через соответствующие свойства или методы – аксессоры объектов (object accessors), или просто аксесоры. При построении выражения для доступа к объекту с помощью аксессоров следует иметь в виду:
чаще всего точкой входа в модель объектов служит объект верхнего уровня, каковым обычно является объект Application. Чтобы получить ссылку на него, используется свойство Application;
чтобы после этого перейти к необходимому объекту, нужно последовательно пройти все «вышестоящие» объекты, получая ссылку на очередной объект с помощью аксессоров. Например, свойство Documents объекта Application в Word возвращает объект-набор Documents, представляющий все открытые документы;
существует другой вид аксессоров – сокращенный; они обеспечивают прямой доступ к объектам модели, не требуя «спуска» от объекта Application. К таким объектам относятся свойства Documents, Workbooks и Presentations, которые позволяют напрямую получить ссылку на набор документов данного приложения. Поэтому для открытия в Word документа MyDoc.doc можно использовать любое из выражений:
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 определяет это сам по текущему контексту выполнения кода;
многие объекты – рабочие книги, рабочие листы, документы, презентации, слайды – являются элементами наборов. Поскольку набор всегда стоит в иерархии на один уровень выше находящихся в нем объектов, то обычно, чтобы получить доступ к элементу набора, следует сначала получить ссылку на набор. Имя аксессора, возвращающего ссылку на объект-набор, часто совпадает с именем набора;
чтобы получить ссылку на отдельный элемент набора, обычно используют свойство или метод Item, которому передают имя или порядковый номер данного элемента. Свойство или метод Item в большинстве наборов применяется по умолчанию;
переход к объекту, стоящему в иерархии на ступеньку выше, зачастую возможен через свойство Parent текущего объекта. Но оно не всегда возвращает ссылку на прямого предка объекта – иногда можно получить ссылку на его «прапредка» (особенно, если этот объект входит в какой-нибудь набор). Иными словами, свойство Parent объекта из набора может возвращать ссылку на предка набора, а не на сам набор. Например, свойство Parent объекта Document в Word возвращает ссылку на объект Application, а не на набор Documents. Чтобы определить тип объекта, ссылку на который возвращает свойство Parent, необходимо вызвать функцию TypeName. Например, в Microsoft Excel следующий оператор сообщает тип объекта, возвращаемого свойством Parent объекта Worksheet:
MsgBox TypeName(Workbook(1).Worksheets(1).Parent)
Функция TypeName позволяет определять тип объекта, полученного в любом выражении, а не только в тех, где используется свойство Parent;
для перехода от какого-либо объекта к объекту Application, стоящему на вершине иерархии, часто используется свойство Application. Оно особенно полезно, если необходимо добраться до объектов приложения, в котором был создан внедренный объект. Например, в Power Point следующее выражение возвращает ссылку на объект Application того приложения, в котором создан OLE-объект, размещенный в третьей фигуре (shape) первого слайда текущей презентации:
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 – возвращает ссылку на объект Application;
свойство Documents объекта Application – возвращает ссылку на набор Documents;
метод Item набора Documents – возвращает ссылку на отдельный объект Document;
свойство Words объекта Document – возвращает ссылку на набор Words;
свойство Item набора Words – возвращает ссылку на отдельный объект Range;
свойство Text объекта Range – записывает текст как первое слово в документе.
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). Связывание может проходить в период выполнения программы (позднее связывание) или на этапе компиляции (ранее связывание). Программа с поздним связыванием выполняется медленнее, чем программа с ранним связыванием. Кроме того, многие вспомогательные средства, встроенные в среду разработки, работают только при использовании раннего связывания.
Чтобы добиться раннего связывания кода, необходимо:
установить ссылку на библиотеку типов, содержащую используемые объекты. Это осуществляется с помощью диалогового окна References (Ссылки);
объявить тип объектных переменных в явном виде. Например, если в объектной переменной будет ссылка на объект Document, объявить переменную следует следующим образом:
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, на который ссылается эта переменная.
- Министерство образования российской федерации
- М инистерство образования российской федерации
- Аннотация
- Содержание
- Тема 1. Основы программирования
- Создание, редактирование и запуск программ
- Переменные, константы и типы данных
- Управляющие конструкции
- Управляющая конструкция If…Then позволяет выполнять один или несколько операторов, если условие истинно. Можно использовать однострочный и блочный синтаксис. Например:
- Тема 2. Введение в модели объектов
- 2.1. Обзор моделей объектов
- 2.2. Автоматизация операций с использованием объектов
- 2.3. Программирование объектов другого приложения
- Тема 3. Объекты Microsoft Office
- 3.1. Объекты Microsoft Access
- 3.2. Объекты Microsoft Excel
- 3.3. Объекты Microsoft Power Point
- 3.4. Объекты Microsoft Word
- Тема 4. Меню и панели инструментов
- 4.1. Средства настройки пользовательского интерфейса
- 4.2. Выбор подходящих элементов пользовательского интерфейса
- 4.3. Система меню
- 4.4. Модификация системы меню на этапе разработки
- 4.5. Модификация системы меню в период выполнения
- 4.6. Панели инструментов
- 4.7. Модификация панелей инструментов на этапе разработки
- 4.8. Модификация панелей инструментов в период выполнения
- Тема 5. Элементы управления на базе ActiveX и диалоговые окна
- 5.1. Разработка нестандартных диалоговых окон
- 5.2. Использование нестандартных диалоговых окон
- 5.3. Работа с элементами управления в документе, листе или на слайде
- Тема 6. Оптимизация кода
- 6.1. Основные принципы оптимизации кода
- 6.2. Оптимизация кода для Microsoft Excel
- 6.3. Оптимизация кода для Microsoft Word
- Тема 7. Отладка и обработка ошибок
- 7.1. Создание обработчика ошибок
- 7.2. Иерархия обработчиков ошибок
- 7.3. Тестирование обработчика за счет эмуляции ошибок
- 7.4. Строчная обработка ошибок
- 7.5. Отключение обработки ошибок
- 7.6. Общие принципы отладки
- 7.7. Режимы конструктора, выполнения и прерывания
- 7.8. Окна отладки
- 7.9. Просмотр стека вызовов
- Тема 8. Разработка приложений для Интернета и Word Wide Web
- 8.1. Термины и концепции, связанные с Интернетом
- 8.2. Работа с гиперссылками
- 8.3. Сохранение документов и объектов в формате html
- 8.4. Элемент средства просмотра Web Microsoft
- 8.5. Элемент управления Internet Transfer
- Указывать допустимый сервер-заместитель в свойстве AccessType элемента управления Internet Transfer (таблица 8.4);
- Элемент управления Internet Transfer автоматически настраивается на нужный протокол, заданный в первой части url. Поэтому применение метода OpenUrl или Execute не требует установки свойства Protocol.
- 8.6. Элемент управления WinSock
- 8.7. Создание персонального Web-сервера
- Тестовые задания для закрепления материала учебного пособия
- Рекомендуемая литература
- Б) дополнительная литература