Лекция Введение в модели объектов Влюбом приложении Office две основные составляющие: содержимое (content) и функциональные возможности (functionality).

Вид материалаЛекция

Содержание


Что такое объекты и модели объектов
Свойства и методы объектов
Получение ссылки на объект
Вызов свойств и методов объекта
Sub FONTS()
Подобный материал:

Лекция 3. Введение в модели объектов



В любом приложении Office две основные составляющие: содержимое (content) и функциональные возможности (functionality). Содержимое – это данные, содержащиеся в документе: слова, числа, графика; информация об атрибутах отдельных элементов (размер окна документа, цвет изображения или размер шрифта того или иного слова). Функциональные возможности – это способы работы с содержимым (например: открытие, закрытие, добавление, удаление, копирование, вставка, редактирование или форматирование его элементов).

Содержимое и функциональность приложения разбиваются на дискретные единицы, называемые объектами. Некоторые объекты уже известны Вам как элементы пользовательского интерфейса: рабочие книги, рабочие листы и диапазоны ячеек Microsoft Excel; документы и разделы Word; презентации и слайды PowerPoint.

Основные темы этой лекции:
  • . обзор моделей объектов;
  • . автоматизация операций с использованием объектов;
  • . программирование объектов другого приложения.



Что такое объекты и модели объектов



Объектом верхнего уровня является объект Application, представляющий само приложение. Например, в модели объектов Microsoft Excel таковым является сам Microsoft Excel. Объект Application содержит другие объекты, доступ к которым возможен только в тот период, когда существует объект-приложение (т. е. при выполнении приложения). Так, объект Application Microsoft Excel содержит объекты Workbook, а объект Application Word – объекты Document. Поскольку существование объекта Document зависит от существования объекта Application Word, принято говорить, что объект Document – потомок объекта Application, и наоборот, объект Application – предок объекта Document.

У многих объектов-потомков у самих есть потомки. Скажем, объект Workbook Microsoft Excel содержит набор (семейство, коллекцию, collection) объектов Worksheet (или является их предком); этот набор представляет все листы рабочей книги. У объекта-предка может быть несколько потомков – например, у объекта Window в Word есть объекты-потомки Panes, Selection и View. По аналогии и у потомка может быть несколько предков, в частности объект-набор Windows в Word – потомок как объекта Application, так и объекта Document.

Взаимосвязь объектов, составляющих приложение, вкупе с тем, как содержимое и функциональные возможности приложения распределяются между объектами, называют иерархией объектов, или моделью объектов. Графическое представление объектных моделей приложений MS Excel и MS Word представлено на рис.1. Полную информацию о структуре объектов можно получить из справочных файлов Visual Basic и Просмотрщика объектов (Object Browser). (Если при установке Office Вы выбрали режим Typical (Обычная), Вам придется запустить программу Setup еще раз и установить справочные файлы Visual Basic для приложений, в которых Вы хотите заняться программированием).

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

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

Это значит также, что для любой операции, которую можно выполнить через пользовательский интерфейс, существует эквивалентный код на Visual Basic. Более того, существует встроенное средство – макрорекодер – позволяющее осуществить трансляцию операций в пользовательском интерфейсе в эквивалентный код на Visual Basic.

Свойства и методы объектов



Доступ к содержимому и функциональности объекта ведется через его свойства и методы. В общем случае свойства используются для доступа к содержимому, которое может включать в себя текст, хранящийся в объекте, или значение атрибута объекта, а методы – для доступа к функциональным возможностям, под которыми понимается все, что разрешается делать с содержимым.

В примере для Microsoft Excel, приведенном ниже, свойство Value объекта Range используется для просмотра значения в ячейке ВЗ на рабочем листе Sales из рабочей книги Current.xls.

Workbooks(“Current.xls”).Worksheets(“Sales”).Range(“B3”).Value = 3

Свойство Bold объекта Font позволяет изменить начертание шрифта в ячейке ВЗ рабочего листа Sales на полужирное:

Workbooks(“Current.xls”).Worksheets(“Sales”).Range(“B3”).Font.Bold = True

А вот пример для Word, где метод Close объекта Document применяется для закрытия файла Draft3.doc:

Documents(“Draft3.doc”).Close

Объекты-наборы



Некоторые объекты могут содержать в себе несколько однотипных объектов. Например, приложение MS Excel может содержать несколько рабочих книг – объектов Workbook. В свою очередь, рабочая книга может состоять их нескольких листов – объектов Worksheet. Такие однотипные объекты объединяются в наборы (семейства, коллекции). Имя коллекции традиционно образуется добавлением буквы s к имени объекта – Workbooks, Worksheets.

Объект-набор можно использовать для доступа к отдельным объектам в наборе – обычно посредством метода или свойства Item. Свойство или метод Item в большинстве наборов используется по умолчанию:

Documents.Item(1)

Documents(1)

Documents(.имя_первого_документа.)

Вы можете также создавать и добавлять к набору новые элементы – обычно методом Add этого набора. Чтобы создать в Word новый документ на основе шаблона Normal (Обычный), напишите:

Documents.Add

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

If Workbooks.Count > 3 Then MsgBox “Открыто > 3 рабочие книги”

Наборы полезны и для других целей. Они, например, позволяют выполнять операции над всеми объектами набора. Для этого Вы перебираете элементы набора с помощью операторов For Each...Next или For...Next. В следующем примере распечатываются имена всех листов рабочей книги .MyBook.xls.:

Dim Sheet As Worksheet

For Each Sheet In Application.Workbooks(.MyBook.xls.).Worksheets

Debug.Print Sheet.Name

Next Sheet

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



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

Чаще всего точкой входа в модель объектов служит Application – объект верхнего уровня. Поэтому выражение, которое возвращает ссылку на набор документов Word, выглядит так:

Application.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, ActiveWorkbook, ActiveWorksheet или

ActiveCell, которые возвращают ссылку на какой-либо активный элемент

приложения. Чтобы закрыть активный документ Word, не нужно ссылаться

ни на объект Application, ни на набор Documents.

ActiveDocument. Close

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



Чтобы добраться до нужных данных приложения (значения в ячейке рабочего листа 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 =

Поскольку свойство Documents глобальное, его можно использовать

без указания Application, а так как Item . свойство или метод по

умолчанию для объектов-наборов, его можно не упоминать в тексте

программы. Следовательно, предыдущий оператор можно записать короче:

Documents(1).Words(1).Text =

Аналогично, в Microsoft Excel нужно пройти весь путь до объекта Range,

который представляет ячейку ВЗ рабочего листа New из рабочей книги

Sales.xls:

Workbooks().Worksheets().Range(<ВЗ>).Value = 7

Объекты Range и Selection

Во всех приложениях MS Office приходится иметь дело с

последовательностями однотипных элементов. Каждой такой

последовательности соответствуют два типа объектов: один определяет сам

объект, другой . набор (коллекцию) этих элементов. Об этом мы уже

упоминали, рассматривая связь пользовательского интерфейса приложений

пакета MS Office и структуры объектов VBA.

Однако мало иметь возможность работать с отдельным элементом или всей последовательностью . нужно уметь работать с произвольм ее подмножеством. Для этой цели придуман класс Range . произвольный диапазон последовательности однотипных элементов. Использование объекта Range позволяет выполнять операции над произвольными подпоследовательностями. Напимер:

. выделение красным цветом данных в ячейках A1:F20 на активном

листе рабочей книги Excel

Dim Rg As Range

Set Rg = ActiveWorksheet.Range(.A1:F20.)

Rg.Font.Color = vbRed

. выделение .жирным. шрифтом 3-го абзаца активного документа Word

ActiveDocument.Paragraphs(3).Range.Font.Bold = True

Так как объект Range просто задает некоторый диапазон, то можно

одновременно работать с несколькими объектами Range.

Второй общеупотребительный объект, который присутствует также во

всех приложениях MS Office, - Selection. Он задает выделенную

областьдокумента или рабочей книги. В отличие от Range, в приложении

может существовать только один объект Selection.

Объекты Range и Selection взаимосвязаны. У объекта Range есть метод

Select, который выделяет заданный диапазон, создавая объект Selection.

Точно также объект Selection имеет метод Range, который позволяет

получить диапазон, связанный с выделенной областью (в основном этот

метод используется в Word). Например:

Dim Rg As Range, Rg2 As Range

Set Rg = ActiveSheet.Range(.A1:C10.,.F5:R9.) . Rg определяет несвязный диапазон

Rg.Select . выделение диапазона соответствующего Rg – при этом создается объект Selection

Dim C As Cells

For Each C In Rg.Cells . перебор всех ячеек,

попадаю_их в диапазон

C.Value = Rnd()*20

Next C


Создание объекта Application


При запуске приложения MS Word автоматически создается объект Word.Application. Аналогично, про открытии Ms Excel создается объект Excel.Application. Однако, иногда требуется одновременно работать с несколькими приложениями. С этом случае необходимо самому создать нужный объект Application и обеспечить доступ к его методам и свойствам.

Чтобы запрограммировать объекты другого приложения:

1. Создайте ссылку на библиотеку типов другого приложения в

диалоговом окне Ссылки (References) меню Сервис.

2. Объявите объектную переменную нужного типа. Ниже объявляется

одна переменная, которая будет указывать на приложение Word, а другая

. на рабочую книгу Microsoft Excel.

Dim appWD As Word.Application, wbXL As Excel.Workbook

3. Используя функцию CreateObject создайте нужный объект. После

того, как объект создан, с ним можно работать, вызывая его свойства и

методы.. Если вам нужно, чтобы на экране при этом появилось окно другого

приложения, установите свойство Visible как True.

Dim appWD As Word.Application

Set appWD = Create0bject ()

appWD.Visible = True

4. Закончив работу с другим приложением, закройте его методом Quit:

appWD. Quit

Рассмотрим пример, в котором показано, как вывести на лист рабочей

книги Excel названия шрифтов, установленных в системе и образцы их

использования для вывода латинских и русских текстов. Список имен

шрифтов досупен в Word, но не в Excel. Поэтому для решения задачи в

приложениии Excel придется создать объект Word.Application.

Sub FONTS()

Dim appWord As Word.Application

Dim Str As Variant, i As Integer, Dim Sh As Worksheet

Set appWord = CreateObject()

. appWord.Visible = True

Set Sh = ActiveWorkbook.Sheets.Add

Sheets(<Шрифты>).Delete

Sh.Name = <Шрифты>

Sh.Activate

i = 1

For Each Str In appWord.FontNames

Range( + CStr(i)) = Str

Range( + CStr(i)) =

Range( + CStr(i)).Font.Name = Str

Range( + CStr(i)) = <Русский>

Range( + CStr(i)).Font.Name = Str

i = i + 1

Next Str

Sh.Range().Select . автоматически подбираем

Selection.Columns.AutoFit . ширину столбцов А:С

Range().Select

appWord.Quit . закрыть объект Word

End Sub