2313
.pdfПродолжение таблица 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
совместно используемым кодом. Вместо сохранения отдельной копии кода для каждого метода каждого объекта VBAобъекты одного и того же типа совместно используют код своих методов.
Несмотря на то, что объекты одного и того же типа совместно используют код для своих методов, метод считается частью объекта; когда вы вызываете определенный метод для конкретного объекта, метод воздействует только на объект, посредством которого вы обращаетесь к этому методу.
После того как объект создан (если это — не встроенный объект), нет необходимости беспокоиться о том, как работают его методы и как объект сохраняет или манипулирует данными. Все, что нужно знать, — как указать объект и как указать метод, который необходимо использовать (или определенное свойство, которое нужно выбрать и изменить). Встроенный код для объекта VBA выполняет остальную работу автоматически.
7.4. Классы объекта
Программные объекты группируются в иерархические классы или коллекции объектов, как объекты реального мира вокруг нас. Все объекты в одном и том же классе имеют одни и те же (или подобные) свойства и методы. Каждый класс объектов может содержать один или несколько подклассов. Объекты, принадлежащие к определенному классу объектов, называются членами (members) этого класса.
MS Word, Excel, Access, PowerPoint, Outlook и т.д. при-
надлежат к общему классу объектов — host-приложений VBA. При запуске Word на вашем компьютере вы создаете экземпляр Word. При наличии достаточных ресурсов памяти в компьютере вы можете запустить Word более одного раза; каждый раз при запуске Word будет создаваться еще один экземпляр Word. Каждый раз при создании или открытии документа в Word создается экземпляр объекта Document. Аналогично, каждая копия Excel, выполняемая на компьютере, является экземпляром приложения Excel, а каждая рабочая книга, откры-
108
тая в данный момент, является экземпляром объекта Workbook.
VBA дает возможность пользователю создавать собственные классы объектов добавлением модуля класса в проект. Ваш модуль класса должен содержать все определения свойств и методов для объекта. После описания нового класса вы можете создавать его экземпляры (объекты этого типа).
7.5. Использование объектов
Операторы программ VBA, использующие объекты, обычно выполняют одно или несколько из следующих действий:
определяют текущее состояние или статус объекта путем выборки значения, сохраняемого в определенном свойстве;
изменяют состояние или статус объекта установкой значения, сохраненного в определенном свойстве;
используют один из методов объекта, обеспечивая выполнение объектом одной из его встроенных задач.
Например, можно определить имя активного в данный момент рабочего листа в Excel, выполняя выборку строки, сохраняемой в свойстве Name рабочего листа. Чтобы изменить имя рабочего листа, необходимо присвоить новую строку свойству Name этого рабочего листа. Для добавления рабочего листа в рабочую книгу используется метод Add рабочей книги.
Прежде чем применять свойства и методы некоторого объекта, их следует сначала определить.
В операторах VBA используйте следующий общий синтаксис для определения свойства или метода объекта:
Object.identifier
Object — любая допустимая ссылка на объект. Объектные ссылки создаются заданием переменной для ссылки на объект или использованием методов или свойств объектов, возвращающих объектную ссылку. Identifier — любое допустимое имя свойства или метода; VBA отображает сообщение о
109
runtime-ошибке при попытке использовать свойства или методы, которые не являются в действительности частью указанного объекта.
|
|
Таблица 7.1 |
|
|
Наиболее важные объекты Excel |
Имя объекта |
|
Описание объекта |
Application |
Само приложение Excel (host-приложение) |
|
Chart |
Диаграмма в рабочей книге |
|
Font |
Этот объект содержит атрибуты шрифта и |
|
|
стиля для текста, отображаемого в рабочем |
|
|
листе |
|
Name |
Заданное имя для диапазона ячеек рабочего |
|
|
листа |
|
Range |
Диапазон ячеек (одна или более) или имено- |
|
|
ванный диапазон в рабочем листе |
|
Window |
Любое окно в Excel; окна используются для |
|
|
отображения рабочих листов, диаграмм и т.д. |
|
Workbook |
Открытая рабочая книга |
|
Worksheet |
Рабочая таблица в книге |
|
|
|
Таблица 7.2 |
|
|
Наиболее важные объекты Word |
Имя объекта |
|
Описание объекта |
Application |
|
Само приложение Word (host-приложение) |
Bookmark |
|
Отдельная закладка в документе |
Document |
|
Открытый документ |
Font |
|
Содержит атрибуты шрифта и стиля для |
|
|
текста, отображаемого в объекте |
Paragraph |
|
Отдельный параграф в документе |
Range |
|
Непрерывная область в документе |
Style |
|
Встроенный или определенный пользовате- |
|
|
лем форматирующий стиль в документе |
Table |
|
Отдельная таблица в документе |
110
|
Продолжение табл. 7.2 |
TableOfContents |
Отдельная таблица содержания документа |
Template |
Шаблон документа |
Window |
Любое окно в Windows |
Из таблиц видно, что Excel и Windows имеют похожие объекты.
7.6. Использование свойств объектов
Свойства объектов можно использовать только двумя способами: получать значение свойства или устанавливать его. Как уже было упомянуто, не все свойства объекта изменяемы. Свойства объектов, которые нельзя изменять, называ-
ют свойствами, доступными только на чтение (read-only),
свойства, которые можно устанавливать, называют свойства-
ми, доступными на чтение/запись (read-write).
Свойства обычно содержат численные, строковые, значения типа Boolean, хотя некоторые свойства могут возвращать значения типа Object или другие типы данных.
Обращение к свойству объекта имеет следующий синтаксис:
Object. Property
Object — допустимая объектная ссылка VBA, тогда как Property представляет любое допустимое имя свойства для объекта, на который выполняется ссылка.
Свойства используются в выражениях так же, как любое другое значение переменной или константы. Можно присваивать значение свойства переменной, использовать свойства объектов в выражениях как аргументы к функциям и процедурам или как аргументы для методов какого-либо объекта.
Чтобы присвоить некоторой переменной значение свойства объекта, используйте следующий синтаксис:
Variable = Object. Property
Variable — переменная, имеющая совместимый со свойством объекта тип; Object — ссылка на объект, a Property — имя свойства объекта, на который выполняется ссылка.
111
Вследующем примере строка, сохраняемая в свойстве Name рабочего листа Excel, на которую ссылается объектная переменная aSheet, присваивается переменной AnyStr:
AnyStr = aSheet.Name
Можно также использовать свойство объекта непосредственно в каком-либо выражении или в качестве аргумента функции или процедуры. Следующие строки представляют обоснованное использование свойства объекта (в каждой строке InstSheet является объектной переменной, заданной для ссылки на рабочий лист Excel):
MsgBox InstSheet.Name
AnyStr = "Эта ячейка имеет имя: " & InstSheet.Name MsgBox LCase (InstSheet.Name)
Почти каждый объект в VBA имеет свойство, которое содержит его имя. Следующий оператор использует MsgBox для отображения свойства FullName в объекте рабочей книги Excel; свойство FullName содержит имя диска, путь к папке и имя файла рабочей книги:
MsgBox InstBook.FullName
Вприведенном выше примере InstBook — это переменная, заданная для ссылки на объект открытой рабочей книги. Если InstBook ссылается на рабочую книгу с именем Sales.xls
впапке My Documents, то окно сообщения, вызываемое приведенным выше оператором, отображает строку "С:\Му Documents\SALES.XLS".
Чтобы задать свойство объекта, просто присвойте свойству новое значение, используя следующий синтаксис:
Object. Property = Expression
Object —допустимая объектная ссылка, Property — свойство объекта, на который выполняется ссылка, a Expression —выражение VBA, которое вычисляется до типа, совместимого со свойством.
Следующая строка, например, изменяет имя рабочего листа, на который ссылается объектная переменная InstSheet, присваивая значение свойству Name листа:
InstSheet.Name = "Первый квартал"
112