Продолжение таблица 6.8
DatePart(интервал, дата [, |
|
Возвращает |
число указанного |
|
первыйДеньНедели [, |
|
временного интервала, |
показы- |
|
перваяНеделяГода]]) |
|
вающее часть даты |
|
|
DateSerial(год, месяц, |
|
Вычисляет значение даты (внут- |
||
день) |
|
реннее представление), соответ- |
||
|
|
ствующее |
указанным |
аргумен- |
|
|
там-выражениям. Например: Da- |
||
|
|
teSerial (2002, 11+1, 25+6) = |
||
|
|
31.12.2002 |
|
|
DateValue(строка) |
|
Переводит аргумент-строку в |
||
|
|
дату. Допускается использова- |
||
|
|
ние строк, содержащих краткие |
||
|
|
и полные названия месяцев |
||
TimeSerial(час, минута, |
|
Вычисляет |
значение |
времени, |
секунда) |
|
соответствующее указанным ар- |
||
|
|
гументам-выражениям |
|
|
TimeValue ( строка ) |
|
Переводит аргумент-строку во |
||
|
|
время |
|
|
|
|
|
Таблица 6.9 |
|
Временные интервалы |
|
|||
Значение |
|
Описание |
|
|
УУУУ |
Год |
|
|
|
q |
Квартал |
|
|
|
m |
Месяц |
|
|
|
у |
День года |
|
|
|
d |
День месяца |
|
|
|
w |
День недели |
|
|
|
ww |
Неделя |
|
|
|
h |
Час |
|
|
|
n |
Минута |
|
|
|
s |
Секунда |
|
|
|
103
7. ОБЪЕКТЫ И КЛАССЫ
7.1. Введение в объектно-ориентированное программирование
Всамом упрощенном понимании объект — это какая-то вещь или материальная сущность реального мира. Каждый объект имеет свойства ("машина черного цвета") и операции, которые выполняются над этими свойствами (ту же машину можно перекрасить в другой цвет). Почти аналогично обстоит дело с объектами в абстрактном мире программ. Например, в качестве объекта можно рассматривать файл, в качестве свойства — его размер или имя, а в качестве операций — чтение или запись.
ВExcel объектами являются рабочие книги, листы, диапазоны данных, таблицы, графические объекты, диалоговые окна и само приложение Excel. В Word объектами являются документы, диапазоны текста, таблицы, графические объекты, диалоговые окна и само приложение Word.
Все host-приложения VBA, такие как Access и Microsoft Project, имеют объекты, доступные для VBA таким же образом, как объекты Word и Excel.
Объектно-ориентированное программирование (ООП)
—наиболее популярная в настоящее время методология программирования, являющаяся развитием структурного программирования. Центральной идеей ООП является инкапсуляция, т. е. структурирование программы на модули особого вида, объединяющие данные и процедуры их обработки, причем внутренние данные модуля могут быть обработаны только предусмотренными для этого процедурами. В разных вариациях ООП такой модуль называют по-разному: класс, абстрактный тип данных, кластер и др. В рамках VBA принято название модуль класса или просто класс. Каждый такой класс имеет внутреннюю часть, называемую реализацией, и внешнюю часть, называемую интерфейсом.
Класс, таким образом, представляет собой новый тип данных, позволяющих создавать новые переменные этого типа
104
— объекты (иногда их еще называют экземплярами класса). Объект состоит из элементов, которые могут быть как собственно данными, т. е. значениями определенного типа данных, так и функциями, реализующими операции над элементамиданными. Элементы-данные называются свойствами класса, элементы-функции — методами класса. Такое описание служит шаблоном для создания в программе конкретных экземпляров (объектов) данного класса, имеющих свои конкретные имена.
Помимо инкапсуляции, ООП на VBA характеризуется еще одним немаловажным свойством — встраиванием. Встраивание — это механизм порождения новых классов с использованием существующих.
Пусть построен класс А, тогда при объявлении нового класса В его свойствами могут быть объекты класса А. В этом случае говорят, что класс А встроен в класс В, и класс А является родителем, а класс В — потомком. Встраивание — транзитивное отношение, т. е. можно создать произвольно длинную цепочку вложенных объектов, образующих иерархию родителей и потомков. Так, в новый класс С можно встроить объект класса В, который является объектом класса А.
Для приложений MS Office характерна ситуация, когда необходимо указать 6—8 уровней вложенности, чтобы добраться до нужного объекта. Например, чтобы скрыть панель инструментов Стандартная в документе Word, необходимо выполнить следующее присваивание:
Word.Application.ActiveDocument.CommandBars(2)._ Visible = False
Механизм встраивания очень удобен и естествен. Прародитель семейства классов может задавать некоторые фундаментальные свойства и методы, а многочисленные потомки, имея родительские корни (свойства и методы), привносят собственные узкоспециальные свойства и методы.
Встраивание менее привычно для программистов на Паскале или C++, где для порождения новых классов чаще используется механизм наследования.
105
Наряду со встраиванием, есть еще один способ использовать существующие классы при создании новых, он называется наследованием. При наследовании указывается, что вновь создаваемый на основе класса А класс В содержит все (или некоторые) методы и свойства класса А, а также свои собственные методы и свойства. Различие между встраиванием и наследованием чисто синтаксическое. При встраивании, используемом в VBA для ссылки на метод или свойство встроенного класса, мы используем имя поля этого класса. При наследовании (характерном для С и C++) имя свойства или метода родительского класса можно использовать непосредственно.
7.2. Свойства объекта
Как и объекты реального мира, объекты VBA имеют различные присущие им качества или свойства (properties). Объекты в Word и Excel имеют свойства, определяющие их вид и поведение: текст в документе Word может отображаться или не отображаться полужирным шрифтом или курсивом, рабочий лист Excel может быть видимым или нет, строки в рабочем листе или таблице имеют свойство высоты, столбцы имеют свойство ширины и так далее.
Свойства регулируют вид и поведение объекта. В Excel можно изменить поведение рабочего листа, изменяя свойство вычисления с автоматического на ручное, или можно изменить вид рабочего листа, задав новый цвет для текста или графики в листе. В Word можно изменить поведение документа, изменяя свойство, которое регулирует показ орфографических ошибок во время набора текста; можно изменить вид документа, задав новые значения для свойств разметки страницы.
Чтобы узнать о текущем виде и поведении объекта, необходимо узнать о его свойствах. Вы можете определить диск, папку и имя рабочей книги Excel или документа Word, рассмотрев свойство FullName этой рабочей книги или документа.
Некоторые свойства объекта можно изменять, некоторые
— нет. Например, в рабочей книге Excel можно изменить имя
106
автора книги, изменяя свойство Author, но нельзя изменить свойство Name рабочей книги. (Свойство Name рабочей книги содержит имя файла на диске и не может быть изменено без создания нового дискового файла или переименования файла рабочей книги вне Excel).
Некоторые объекты имеют свойства с одними и теми же или подобными именами: объекты Application, Workbook и Worksheet в Excel — все имеют свойство Name. Каждый объект рабочего листа сохраняет данные для своих свойств внутри самого рабочего листа вместе с пользовательскими данными.
Пользовательские данные (user data) — это любые данные, со-
храняемые объектом, которые поступают непосредственно от пользователя подобно данным, содержащимся в ячейках рабочего листа.
7.3. Методы объекта
Объекты реального мира почти всегда имеют тот тип присущего им поведения или действия, который они могут выполнить. Объекты VBA также имеют поведение и возможности, называемые методами (methods). Объект рабочей книги Excel, например, имеет встроенную способность добавлять к себе новый рабочий лист — метод добавления рабочих листов (называемый Add). Другой пример: документ Word имеет встроенную способность проверять орфографию текста в документе — метод проверки орфографии (называемый, Check-
Spelling).
Методы изменяют значения свойств объектов; методы выполняют также действия с данными (или над данными), сохраняемыми объектом. Методы во многом похожи на процедуры VBA, с которыми вы уже знакомы, но связаны с объектом; к методам объекта можно обратиться, только используя объект.
Одной из причин того, что объектно-ориентированное программирование стало популярной техникой проектирования, является то, что оно позволяет разработчикам программного обеспечения создавать более эффективные программы с
107