Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2313

.pdf
Скачиваний:
1
Добавлен:
15.11.2022
Размер:
1.4 Mб
Скачать

Продолжение таблица 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]