- •Основы офисного программирования и язык vba
- •Офисное программирование
- •Состав Office 2000
- •Инсталляция Office 2000
- •Содержимое диска "Resource Kit"
- •Документ Issues
- •Документ ork9
- •Папка Tools
- •Содержимое диска "Language Pack"
- •Об этой книге и ...
- •Моя благодарность
- •Vba и объекты. Обзор
- •Библиотека объектов Office 2000 - каркас приложений
- •Встраивание вместо наследования
- •Построение каркаса документа
- •Библиотека объектов Office 2000 и Object Browser
- •Объекты Application
- •Свойства-участники
- •Вторая группа терминальных свойств
- •Методы объектов Application
- •События объектов Application
- •Совместная работа приложений. Создание объектов Application. Раннее и позднее связывание
- •Коллекции в Office 2000
- •Коллекции объектов Office 2000
- •Коллекции Excel: Workbooks, Sheets
- •Коллекция Workbooks
- •Коллекция Sheets
- •Коллекции Word: Documents, Paragraphs и другие
- •Коллекция Documents
- •Коллекция Paragraphs
- •Коллекция Sections
- •Коллекции Characters, Words, Sentences
- •Коллекции и конструкция For Each … Next
- •Объекты Range
- •Что определяет объект Range?
- •Метод Range
- •Объекты Selection
- •Метод Select и свойство Selection
- •Активные объекты и метод Activate
- •Проектирование документов
- •Документ и его программный проект
- •Модули - обработчики событий
- •Стандартные модули
- •Модули классов
- •Модуль макросов
- •Структура модуля. Окно проекта и Окно кода
- •Окно проекта
- •Свойства проекта
- •Имя проекта
- •Защита проекта
- •Окно кода
- •Еще раз о "переиспользовании" модулей
- •Проект и область видимости
- •Система документов и ее проект
- •Организация системы документов
- •Как организуются ссылки между проектами
- •Обмен информацией между документами
- •Система документов One - Two - Three
- •Типы данных
- •Простые типы данных.
- •Объявление переменных и констант простых типов
- •Синтаксис объявления простых переменных
- •Объявления по умолчанию
- •Константы
- •Массивы
- •Динамические массивы
- •Записи и тип, определенный программистом
- •Что можно делать с записями?
- •Раздел объявлений
- •Раздел опций
- •Разделы констант, типов и переменных
- •Раздел Declare
- •Правила именования
- •Типы и классы Еще раз о понятии "класс"
- •Что нового в классах "Office 2000"
- •Создание класса "Личность"
- •Объекты и переменные
- •Объекты, класс которых определен пользователем.
- •Объекты "родного" приложения
- •ActiveX-объекты
- •Модуль класса Свойства
- •Сокрытие свойств
- •Конструкторы и деструкторы. Стандартные события
- •Стандартные события Initialize и Terminate
- •Два конструктора класса Rational
- •Процедуры - свойства
- •Как создаются процедуры- свойства
- •Синтаксис Let, Get и Set
- •Классы, как упаковка
- •Семейство классов и процедуры - свойства
- •Friend методы
- •События
- •Классы, объекты With Events и обработчики событий
- •Модуль класса с объектом WithEvents
- •Объект WithEvents
- •События собственных классов
- •Как создать класс с событиями
- •Как зажигаются события
- •Где и как следует создавать обработчики событий для экземпляров класса
- •Связывание объектов
- •Реальные объекты и инициирование событий
- •Семейство классов и реализация интерфейсов
- •Наследование
- •Виртуальные методы и полиморфизм
- •Абстрактные классы
- •Наследование и полиморфизм в Office 2000
- •Наследование интерфейсов
- •Полиморфизм семейства классов
- •Проект "Люди и Машины"
Коллекции Word: Documents, Paragraphs и другие
Word позволяет одновременно работать с одним или несколькими документами. Документы и коллекция документов - это центральные понятия Word. Классы Document и Documents играют для Word ту же роль, что и классы WorkBook и WorkBooks для Excel. Документ Word организован довольно сложно. Текст - основа большинства документов - может быть дополнен рисунками и таблицами, с ним могут быть связаны комментарии и исправления, сноски и колонтитулы и т. д. Но об этом речь впереди, а пока чуть подробнее поговорим о тексте. Конечно, текст можно рассматривать как последовательность символов, его составляющих. Но ведь куда как часто мы оперируем с более крупными единицами! Word использует привычные понятия: символы, слова, предложения, абзацы, разделы.
Существуют понятия - существуют и классы, соответствующие этим понятиям. Объект Application. Word, представляющий приложение Word, имеет свойство (встроенный объект) Documents. При обращении к свойству возвращается объект класса Documents - коллекция всех открытых документов. Элемент коллекции - документ - это объект класса Document.
Объект Document, представляющий один документ, имеет свойства:
Свойство |
Возвращает |
Characters |
объект класса Characters, представляющий коллекцию символов текста документа |
Words |
объект, представляющий коллекцию слов |
Sentences |
объект, представляющий коллекцию предложений |
Paragraphs |
объект, представляющий коллекцию абзацев |
Sections |
объект, представляющий коллекцию разделов или секций документа |
ListParagraphs |
объект, представляющий коллекцию списков, входящих в текст документа |
Конечно, это лишь часть многочисленных свойств, связанных с текстом документа. Заметьте: данными свойствами обладает не только сам документ. Ими обладают и объекты Selection и Range, представляющие части документа. При этом возвращаемые объекты представляют соответствующие коллекции данной части документа.
Казалось бы, раз есть коллекции Characters или Words, то должны существовать и классы Character и Word, представляющие отдельный символ или отдельное слово. Но это не так. Элементами коллекций Characters, Sentences и Words являются объекты класса Range. Нет операций, отдельно определенных над символами, словами или предложениями, - они определены над интервалами, последовательностью символов, представляемых объектом Range. Ситуация здесь подобна Excel, где элементами коллекции Cells являются не ячейки, а все тот же объект Range.
Абзацу и разделу соответствуют свои классы объектов - Paragraph и Section соответственно. Но у нас сейчас разговор пойдет не о классах отдельных объектов, а о коллекциях. Мы начнем с коллекции документов.
Коллекция Documents
Коллекция Documents представляет все открытые документы Word. По своим свойствам и поведению она напоминает коллекцию WorkBooks, представляющую все открытые рабочие книги Excel. Поэтому мы будем часто ссылаться на уже описанные свойства и методы коллекции WorkBooks.
Документы, как и рабочие книги, могут существовать постоянно и храниться во внешней памяти - как файлы с обычным для документов Word расширением .doc. При открытии приложения Word автоматически открывается уже существующий или новый пустой документ. Так что в момент открытия приложения коллекция документов не пуста и содержит минимум один документ. Для добавления в коллекцию новых элементов используются методы:
-
Add - добавляет новые пустые документы;
-
Open - открывает файл, содержащий существующий документ и автоматически добавляет его в коллекцию.
Метод Add имеет синтаксис:
Add(Template,NewTemplate)
Параметр Template, задающий шаблон открытия документа, является строкой с именем файла, хранящего шаблон. Параметр не является обязательным и, если он опущен, используется стандартный шаблон Normal (файл Normal. dot). Второй параметр (тоже необязательный) - NewTemplate - булевого типа; он равен True, если документ открывается, как шаблон. Так что коллекция Documents содержит не только документы, но и шаблоны.
У метода Open десять параметров. Обязательным является только первый - FileName; он задает имя файла, содержащего документ (шаблон). Остальные параметры определяют режимы открытия: пароль, статус файла, преобразование формата при открытии и т. п.
Документ удаляется из коллекции при его закрытии. Вне коллекции не может существовать открытый документ. Метод Close закрывает документ и одновременно удаляет его из коллекции. Его синтаксис:
Close(SaveChanges, OriginalFormat, RouteDocument)
Все параметры являются необязательными. Первый указывает действия, предпринимаемые при закрытии документа, и может быть одной из констант: wdSaveChanges, wdDoNotSaveChanges, wdPromptToSaveChanges. В зависимости от константы сделанные в документе изменения будут сохранены, проигнорированы или решение будет предоставлено пользователю в режиме диалога. По умолчанию изменения сохраняются при закрытии документа. Параметр OriginalFormat указывает формат сохранения документа и может быть одной из констант: wdWordDocument, wdOriginalFormat, wdPromptUser. В первом случае при сохранении используется формат документов Word, во втором - оригинальный формат документа - тот, что он имел при открытии; в последнем случае решение принимает пользователь в режиме диалога. По умолчанию предполагается формат документа Word. Третий параметр - булевого типа - равен True, если документ после закрытия направляется следующему пользователю, который принимает участие в работе над этим документом. Данный параметр имеет смысл лишь при коллективной работе над документом в сети. По умолчанию он равен False.
Метод Save позволяет сохранять документы (шаблоны) без закрытия и удаления из коллекции. Этот метод имеют как объекты класса Document, так и коллекции - объекты Documents. Если метод Save вызывает коллекция, то сохраняются все документы этой коллекции. При этом его синтаксис:
Save(NoPrompt, OriginalFormat)
Оба параметра необязательны. Если значение первого - True, Word автоматически сохраняет все документы, в противном случае возникнет диалог с пользователем о сохранении каждого из документов. Параметр OriginalFormat задает формат сохранения так же, как и в методе Close. У метода Save, используемого для сохранения отдельного документа, параметров нет. Если сохраняется новый документ, с которым еще не связано имя файла, его хранящего, будет вызвано диалоговое окно SaveAs, в котором пользователь задаст это имя и, если надо, путь.
Для получения доступа к элементу коллекции, как обычно, можно вызвать метод Item. Его единственный параметр Index задает порядковый номер или имя документа в коллекции. Item является методом по умолчанию, так что индекс можно непосредственно указывать у объекта, задающего коллекцию.
Класс Documents имеет типичные для коллекций свойства:
-
Application;
-
Count;
-
Creator;
-
Parent.
Эти свойства мы описали, когда речь шла о коллекции WorkBooks. Закончим рассмотрение этой коллекции примером:
Public Sub WorkWithDocuments()
'Работа с коллекцией документов
Dim N As Long, I As Byte
Dim PathDir As String
PathDir = "e:\O2000\CD2000\Ch1\"
With Documents
N = .Count
Debug.Print "Число документов в коллекции Documents " & _
"при открытии приложения Word = ", N
' Добавление 2-х новых документов (второй представляет шаблон)
.Add
.Add NewTemplate:=True
'Добавление двух существующих документов
.Open (PathDir & "DocThree")
.Open (PathDir & "DocFive")
N = .Count
Debug.Print "Число документов после 4-х вызовов методов " _
& "Add и Open =", N
Debug.Print "Имена документов в коллекции:"
For I = 1 To .Count
Debug.Print .Item(I).Name
Next
'Закрытие двух документов и, следовательно, удаление их из коллекции
.Item(2).Close
.Item(3).Close
N = .Count
Debug.Print "Число документов после двух вызовов " _
& "метода Close =", N
Debug.Print "Имена документов, оставшихся в коллекции:"
For I = 1 To .Count
Debug.Print .Item(I).Name
Next
End With
End Sub
Пример 1.5. (html, txt)
Приведем результаты отладочной печати (В данном примере испульзуюся документы Dex1, DocFive, DocThree:
Число документов в коллекции Documents при открытии приложения Word = 1
Число документов после 4-х вызовов методов Add и Open = 5
Имена документов в коллекции:
DocFive.doc
DocThree.doc
Template2
Document3
Dex1.dot
Число документов после двух вызовов метода Close = 3
Имена документов, оставшихся в коллекции:
DocFive.doc
Template2
Dex1.dot
Обратите внимание на то, что элементы добавляются в начало коллекции, а не в ее конец, как это было при добавлении элементов в коллекцию WorkBooks Excel. При удалении элемента происходит перенумерация индексов, поэтому удаляется второй и четвертый элемент коллекции при последовательном выполнении методов Ite(2). Close, Item(3).Close.