Основы офисного программирования и язык VBA

         

Методы объектов 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. Несколько методов добавлено для работы с текстами. Детали оставим на будущее.


Содержание раздела