Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 1....doc
Скачиваний:
73
Добавлен:
17.12.2018
Размер:
1.88 Mб
Скачать

Вторая группа терминальных свойств

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