- •Основы офисного программирования и язык 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
- •Наследование интерфейсов
- •Полиморфизм семейства классов
- •Проект "Люди и Машины"
Вторая группа терминальных свойств
Объекты Application помимо свойств, заданных вложенными объектами, обладают "терминальными" свойствами. Их задают переменные языка программирования, типы которых непосредственно встроены в язык, - string, integer и т.д. Терминальные свойства также могут быть как специфическими, так и общими для всех приложений, определяя, например, свойства окна, в котором работает приложение. Терминальные свойства просты для понимания, мы не будем на них подробно останавливаться, ограничимся одним примером использования общих свойств. Приведем два макроса, один из которых изменяет размеры окна, предварительно запомнив текущие размеры и состояние окна. Второй из макросов восстанавливает прежние размеры.
'Объявление переменных на уровне модуля
Dim LeftW As Long, TopW As Long, HeightW As Long, WidthW As Long
Dim StateW As WdWindowState
Sub ChangeSizeWindow()
With Application
'Запоминаем характеристики окна
StateW = .WindowState
LeftW = .Left
TopW = .Top
HeightW = .Height
WidthW = .Width
' Изменяем характеристики окна
.WindowState = wdWindowStateNormal
.Left = 100
.Top = 100
.Height = 400
.Width = 400
End With
End Sub
Public Sub ResetSizeWindow()
With Application
' Восстанавливаем характеристики окна
.Left = LeftW
.Top = TopW
.Height = HeightW
.Width = WidthW
.WindowState = StateW
End With
End Sub
Пример 1.1. (html, txt)
Эту пару макросов можно применять к трем приложениям Office 2000, поскольку в каждом из них объект Application обладает терминальными свойствами Left, Top, Height, Width, WindowState. Единственное, что придется поменять, - тип переменной StateW и задающую статус окна константу wdWindowStateNormal, так как у каждого из приложений свои имена констант и свои типы для них, хотя они и задают одинаковые значения. Заметьте: по имени константы можно определить ее тип и назначение. Так, константы Word начинаются префиксом "wd", а константы Excel - "xl".
Следует отметить, что, Access продолжая выделяться, этих терминальных свойств еще не приобрел.
Замечание.
Все примеры этой книги мы старались проверить непосредственно на машине. С этой целью, как правило, для проверки соответствующего примера в тестовом документе создавалась командная кнопка, в ответ на щелчок которой вызывался соответствующий макрос, текст которого и приводится в книге. На рис. 1.10 показан такой тестовой документ, для проверки примеров этой лекции.
увеличить изображение Рис. 1.10. Тестовый документ с командными кнопками
Методы объектов Application
Казалось бы, объекты Application не должны иметь много методов, а среди имеющихся методов большая часть должна быть общей для приложений разных типов. Ведь специфика приложения должна проявляться на более низком уровне иерархии, когда начинается работа, например, с документами Word или рабочими книгами Excel. Но это не так, - реально методов много, а общих методов мало. Более того, даже методы Activate, Run, Quit, имеющиеся у всех приложений, совпадающие по именам и предназначенные для решения стандартных задач (активизация приложения, запуск макроса, выход из приложения) организованы по-разному. Так, метод Quit() в Excel не имеет параметров - он, естественно, завершает приложение. А вот в приложении Word у этого метода 3 параметра: Quit([SaveChanges], [OriginalFormat], [RouteDocument]), - позволяющие в момент выхода указать, сохранять ли сделанные изменения и их формат, пересылать ли документ всем, кто работает с ним.
Лишь приложение Power Point "правильно" устроено с нашей точки зрения, - его объект Application имеет всего четыре метода; помимо трех методов, только что перечисленных, у него еще есть метод Help. Это тоже один из общих методов, которого нет только у приложения Access.
Из общих в Office 2000 методов для Word, Access и Excel отметим группу DDE-методов, обеспечивающих динамический обмен данных. Word и Excel имеют общий метод OnTime, о котором стоит рассказать подробно. Он позволяет запустить некоторый макрос в заданное время. Каждое утро, например, можно запускать макрос, позволяющий провести антивирусную профилактику, сохранить резервные копии и т. п. Синтаксис метода в приложении Word таков:
OnTime (When, Name, Tolerance)
Первый обязательный параметр When задает время запуска - некоторое выражение, значением которого является строка, задающая время. При задании этого параметра часто используются функция Now, которая возвращает текущее время, и функции TimeValue и TimeSerial, преобразующие время, заданное в относительно произвольной форме к фиксированному стандарту.
Параметр Name - также обязательный - задает имя запускаемого макроса. Макрос должен быть доступен как в момент выполнения процедуры OnTime, так и когда наступает время его выполнения, указанное в параметре When. Поэтому разумно такие макросы помещать, например, в проект Normal, доступный для всех приложений Word.
Параметр Tolerance задает диапазон времени, в течение которого есть смысл запустить макрос, если он не смог быть запущен в указанный параметром When момент. Причин, по которым макрос нельзя запустить в точно указанный срок, может быть много, - например, идет модальный диалог, который нельзя прервать до его завершения.
В приложении Excel у этого метода появился дополнительный, четвертый параметр, но суть метода сохранилась. Первые два параметра сохранили свой смысл, а третий слегка изменился, - он задает теперь последний срок запуска макроса. Изменились и ключевые имена параметров, тем не менее, приведенный ниже пример будет правильно работать, как в Excel, так и в Word:
Sub InTime()
'Запуск одного из двух макросов "Приветствие"
'Один запускается по утрам в 10.00, другой - через 1 минуту,
'начиная отсчет от момента выполнения метода OnTime
If Now < "10:00:00" Then
Application.OnTime TimeValue("10:00 am"), "Morning"
Else
Application.OnTime Now + TimeValue("00:01:00"), "Hello"
End If
End Sub
Заметьте: запускается только один из макросов. "Завести два будильника", дважды вызвав метод OnTime, нельзя - ведь только один таймер следит за запуском макроса. Пока "заведенный" макрос не будет исполнен, любая попытка установить время для запуска следующего макроса приведет к отмене предыдущего указания.
Для полноты картины приведем тексты макросов-приветствий:
Sub Morning()
' Утреннее приветствие
MsgBox Prompt:="Привет! Я рад, работать с Вами!", Buttons:=vbOKOnly
End Sub
Sub Hello()
'Приветствие
MsgBox Prompt:="Привет! Будем работать!", Buttons:=vbOKOnly
End Sub
Итак, подводя итоги, отметим, что только объект Power Point.Application имеет всего четыре метода. Остальные объекты Application имеют десятки методов, большей частью отражающих специфику приложения. Например, в Office 2000 объект Access.Application имеет:
-
Группу из 9 методов Create, позволяющих программно создать проект, элемент управления, форму, отчет и другие элементы приложения.
-
Группу D - функций, общих с Excel, позволяющих работать с запросами над списками Excel.
-
Группу Get и Set - методов, позволяющих, например, получить или установить те или иные опции.
-
Методы Open, Close, New, позволяющие открывать, закрывать или делать текущей новую базу данных.
-
Другие методы.
Следует понимать причину "изобилия" методов у объектов Application. Дело в том, что большинство методов, это, фактически, методы объектов нижних уровней, вынесенные на верхний уровень иерархии.
Один и тот же метод X может быть определен как для объекта Application, так и для объектов разных классов, вложенных на разных уровнях иерархии. Иногда это позволяет выполнять массовые операции над всеми объектами, входящими в иерархию. Так, метод Calculate в Excel применим к объектам Application, WorkBook и Worksheet. Вызов Application.Calculate приведет к запуску вычисления формул всех рабочих листов всех рабочих книг.
Но будьте осторожны: методы - "тезки" могут отличаться параметрами и реализацией. Например, методы проверки правописания и грамматики CheckSpelling и CheckGrammar определены для трех объектов Word: Application, Document и Range. Вызванные объектами Document и Range, они проверяют текст в диапазоне, связанном с объектом, вызвавшим метод. А у одноименных методов объекта Application появляется дополнительный параметр, задающий проверяемую строку.
Еще один пример - метод Move, которым обладают объекты:
-
Application, Task, Range, Selection - в приложении Word;
-
Chart, Charts, Worksheet, Worksheets, Sheets в приложении Excel;
-
общие объекты Assistant, CommandBarControl из библиотеки объектов Office;
-
Control, Controls из библиотеки объектов MSForms.
За общим именем скрываются похожие, но разные по количеству параметров и по действию методы. В ООП одноименные методы одного или разных классов, различные по количеству и типам параметров и (или) реализации, называются перегруженными. В Office 2000 широко применяется перегрузка методов. С этим часто приходится сталкиваться при получении справок в электронной документации, например, по уже упомянутому методу Move, когда приводятся несколько его перегруженных вариантов. В этом случае дается список классов, обладающих данным методом. Выбрав класс, можно получить справку по конкретной реализации метода в данном классе.
Осталось еще рассказать, какие новые методы появились у Application -объектов приложений Word, Access и Excel в Office 2000 в сравнении с предыдущей версией Office 97. Общих новых методов нет.
В приложении Word у объекта Application появилось 8 новых методов. Два из них расширяют набор метрических преобразований, четыре определены над клавиатурой и связаны с расширенной поддержкой национальных языков в Office 2000. Еще один метод следует упомянуть подробнее, - речь идет о функции DefaultWebOptions, возвращающей объект подобного класса. Если взглянуть на ранее приведенную таблицу новых свойств, то можно заметить, что приложения Power Point и Excel имеют новое свойство, возвращающее объект этого класса. Приложение Word вместо этого имеет метод, возвращающий тот же объект. Один Access пока что не имеет ни подобного свойства, ни метода.
В приложении Excel, как ни странно, нет новых методов, Более того, исчезли два старых метода: CentimetersToPoints, InchesToPoints, занимающихся метрическими преобразованиями. Вместо того, чтобы добавлять новые методы этой группы, как это сделано в Word, решили убрать эту группу методов из ведения объекта Application.
Больше всего новых методов появилось у объекта Access.Application, - их 18. Прежде всего, пополнилась группа Create - методов. Теперь можно создавать не только формы и отчеты, но и проекты (CreateAccessProject), страницы доступа (CreateDataAccessPage), элементы управления с расширенным набором свойств, размещаемые, возможно, в отчете(CreateControlEx, CreateReportControlEx). С проектами работают еще два метода, - OpenAccessProject, NewAccessProject. Несколько методов добавлено для работы с текстами. Детали оставим на будущее.