- •Основы офисного программирования и язык 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
- •Наследование интерфейсов
- •Полиморфизм семейства классов
- •Проект "Люди и Машины"
Коллекции Characters, Words, Sentences
Свойства Characters, Words, Sentences возвращающие коллекции символов, слов или предложений, имеют объекты класса Documents, Selection, Range. Все эти коллекции устроены довольно просто. Они имеют известные нам свойства:
Application, Count, Creator, First, Last, Parent
и единственный метод Item(Index). Этот метод для всех коллекций возвращает объект Range, позволяющий работать как с единственным символом, так и с совокупностью символов, соответствующей слову или предложению. Добавление в коллекцию и удаление из нее элементов осуществляется методами объекта Range.
Поскольку никаких новых свойств и методов эти коллекции не имеют, нет смысла приводить примеры работы с ними. По существу все сведется к вызову методов объекта Range, а таких примеров было достаточно (см. последнюю процедуру).
Коллекции и конструкция For Each … Next
При работе с коллекциями довольно часто приходится организовывать цикл по всем элементам коллекции. До сих пор во всех наших примерах мы использовали обычные средства - цикл "For", где количество шагов цикла определялось свойством Count (его имеет каждая коллекция). Наша конструкция выглядела так:
With <объект>
For i = 1 To .Count
.Item(i) ' Доступ к i-му объекту и работа с ним
Next i
End With
VBA предлагает специальную конструкцию " For Each" для организации подобных циклов. Синтаксис конструкции таков:
For Each <Элемент> In <Группа>
[<Операторы>]
[Exit For]
[<Операторы>]
Next [<Элемент>]
где:
<Группа> - имя объекта-коллекции или массива.
<Элемент> - объект (переменная), совпадающий по классу с элементами коллекции, или имеющий тип Variant. Для массивов допустим только тип Variant. Нормально цикл заканчивается, когда переменная цикла получила все возможные значения и коллекция исчерпана. Но можно организовать досрочный выход. Для этого используется внутренняя конструкция Exit For. Обычно она помещается в Then-ветвь оператора If. Если условие выхода выполняется, следом выполняются Exit For и следующие за ним операторы, требуемые для корректного завершения цикла. После чего управление покидает цикл.
Цикл For Each не может использоваться для массивов с элементами, определенными пользователем. Последнее объясняется тем, что переменная типа Variant не может принимать пользовательский тип.
Приведем пример использования "старой" и "новой" конструкций:
With Documents
For i = 1 To .Count For Each doc In Documents
Debug.Print .Item(i) Debug.Print doc
Next i Next doc
End With
Преимущество "новой" очевидно: удобнее иметь сам элемент doc вместо индекса элемента i. Особенно это может быть важно, когда в ходе цикла приходится многократно обращаться к элементу doc.
При работе с коллекциями используйте, как правило, конструкцию For Each. Кроме всего прочего, она выполняется намного эффективнее по времени исполнения.
Объекты Range
Роль коллекций во всех приложениях Office 2000 велика. Если одновременно могут существовать несколько объектов (экземпляров) одного и того же класса, то существует и объединяющий их класс - коллекция, в которой собраны все экземпляры. Класс коллекция позволяет работать с последовательностью элементов - экземпляров класса.
Но двух классов объектов недостаточно: мало иметь возможность работать с элементом или с последовательностью всех элементов - нужно уметь работать и с частью этих объектов, - произвольной подпоследовательностью элементов. Для этой цели и придуман класс объектов Range. При работе в Word и Excel программисту чаще всего приходится оперировать именно с этим классом объектов - словами, абзацами, символами документов Word, ячейками и их всевозможными диапазонами в Excel.