Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

840

Часть VII. Дополнительные темы

 

MsgBox NumLock.Value

End

Sub

Представленная ниже процедура переключает клавишу <NumLock>.

Sub

ToggleNum Lock()

 

Dim NumLock As New NumLockClass

 

NumLock. Toggle

End

Sub

Наконец, последняя процедура переключает состояние клавиши <NumLock> без ис­ пользования метода Toggle.

Sub ToggleNum Lock2()

Dim NumLock As New NumLockClass

NumLock.Value = Not Num Lock.Value

End Sub

Понятно, что использование класса NumLock намного проще, чем обращение к API-функциям. Также ранее созданный модуль класса можно использовать в любом другом проекте.

К о м п а к т-д и ск

Полностью завершенный модуль класса для этого примера находится на прилагаемом к книге компакт-диске в файле keyboard c la s s e s .xlsm . Здесь же находятся модули классов для обнаружения и установки состояния клавиш <Caps Lock> и <Scroll Lock>.

Дополнительные сведения о модулях классов

Пример предыдущего раздела продемонстрировал способы создания нового объекта, обладающего свойством V alue и методом Toggle. Но объект может иметь любое ко­ личество свойств, методов и событий.

Имя, которое используется для модуля класса, является одновременно и именем объ­ екта класса. По умолчанию модули классов получают такие имена, как C la s s l, C lass2

ит.д. Модулю класса требуется более точное имя.

Програм м ирование свойств объектов

Многие объекты обладают как минимум одним свойством. Однако объект может иметь любое количество свойств. После определения свойства его используют в коде, для чего применяется стандартный синтаксис с разделителем-точкой:

объект .свойст во

Параметр редактора VBE Auto List Members (Автоматическая вставка объектов) применяется и к объектам, определенным в модуле класса. Это упрощает определение свойств и методов при написании кода.

Свойства объекта, определяемого

в модуле класса, могут предназначаться только для

чтения, только для записи, а также

для чтения и записи. Свойство, предназначенное

только для чтения, определяется с помощью процедуры P ro p e rty Get. Ниже приве­

ден пример подобной процедуры.

P ro p e rty Get F ile N am eO nly()

As

S trin g

FileN am eO nly = ""

 

 

For i =

Len(FullN am e) To

1

Step -1

Char

= M id (F u llN a m e ,

i ,

1)

T r u e .
S a v e A s E x c e l F i l e
F i l e S y s ,

Глава 29. Модули классов

841

I f

Char

= " \ " Then

 

 

E x it

F u n c tio n

 

E lse

 

 

 

FileN am eO nly = Char & FileNam eO nly

 

End

I f

 

 

Next i

 

 

 

End P ro p e rty

 

 

Несложно заметить, что процедура P r o p e r t y G e t

работает как функция. Код вы­

числяет и возвращает значение свойства, которое соответствует названию процедуры. В приведенном примере в качестве имени процедуры используется F ile N a m e O n ly . Процедура возвращает имя файла, которое содержится в значении общедоступной пере­

менной F u llN a m e . Например, если переменная

F u llN a m e

содержит значение

с : \ d a t a \

 

 

m y f i l e . t x t , то процедура возвращает значение

m y f i l e . t x t .

Процедура F i l e ­

N a m e O n ly вызывается тогда, когда код VBA обращается к свойству объекта.

Д ля свойств, ориентированны х на чтение и запись, необходим о создать две процеду­

ры: P r o p e r t y G e t (отвечает за чтение значения свойства) и P r o p e r t y L e t

(устанавливает значение свойства). Значение, определенное свойству, рассматривается в качестве последнего (или единственного) аргумента процедуры P r o p e r t y G e t .

Ниже приводятся два примера подобных процедур.

Dim

X L F ile As Boolean

P ro p e rty

Get

S a v e A s E x c e lF ile () As Boolean

 

S a ve A sE xce lF ile = X L F ile

End

P ro p e rty

 

P ro p e rty

L e t

S a v e A s E x c e lF ile (b o o lV a l As Boolean)

X L F ile

=

b o o lV a l

End

P ro p e rty

 

П р и м е ч а н и е

Если свойство имеет объектный тип данных, используется P ro p e rty Set

вместо P ro p e rty L et.

Переменная, объявленная в модуле класса с областью действия P u b l i c , может также применяться в качестве свойства объекта. В представленном выше примере избавимся от

процедур P r o p e r t y G e t

и P r o p e r t y L e t и заменим их на объявление переменной

на уровне модуля.

 

P u b lic S a ve A sE xce lF ile

As Boolean

Если необходимо аюгивизировать свойство, предназначенное только для записи, восполь­ зуйтесь процедурой P r o p e r t y L e t без соответствующей процедуры P r o p e r t y G e t.

Предыдущие примеры предполагают существование булевой переменной X L F i l e , которая определена на уровне модуля. Процедура P r o p e r t y G e t возвращает значение этой переменной в качестве значения свойства. Если объект называется то следующий оператор будет отображать текущее значение свойства S a v e A s E x c e l F i l e :

MsgBox F ile S y s . S a ve A sE xce lF ile

С другой стороны, процедура P r o p e r t y L e t принимает аргумент и использует значение аргумента для изменения значения свойства. Например, можно создать опера­ тор (приведенный ниже), который будет устанавливать свойство в значение

842

Часть VII. Дополнительные темы

F ile S y s . S a ve A sE xce lF ile = True

 

В данном случае значение T rue

передается процедуре P ro p e rty L et, которая и

изменяет значение свойства.

В предыдущих примерах используется переменная уровня модуля — X LFile. Имен­ но эта переменная используется для хранения значения свойства. Такую переменную не­ обходимо создавать для каждого свойства, которое объявляется в модуле класса.

П р и м еч ан и е

Процедуры свойств подчиняются всем правилам именования процедур. Может оказаться, что VBA не позволит использовать в названиях процедур отдельные зарезервированные слова. Если при создании процедуры свойства отображается сообщение о синтаксической ошибке, рекомендуется изменить

ееназвание.

Програм м ирование м етодов объектов

Метод объекта класса программируется подобно другим процедурам. Для этого ис­ пользуются ключевые слова Sub или F u n ctio n , которые размещаются в модуле класса. Как правило, объект имеет методы, однако может существовать и без них. Для вызова метода в коде используются стандартные соглашения:

объект.метод

Как и любой другой метод VBA, метод объекта класса выполняет определенные дей­ ствия. Следующая процедура представляет метод, который сохраняет рабочую книгу в одном из двух форматов. Используемый формат определяется значением свойства XLFile. Нетрудно заметить, что в этой процедуре нет ничего необычного.

Sub

S a v e F ile O

 

I f

X L F ile Then

A ctive W o rkb o o k . SaveAs F ileN am e: =FName, _

 

 

F ile F o rm a t: =xlW orkbookNorm al

 

E lse

 

 

A ctive W o rkb o o k . SaveAs F ileN am e: =FName, _

 

 

F ile F o rm a t: =xlCSV

 

End

I f

End

Sub

Класс C S V FileC lass, рассматриваемый в следующем разделе, существенно прояс­ нит концепцию свойств и методов объекта, определенного в модуле класса.

События модуля класса

Каждый модуль класса поддерживает два события: I n i t i a l i z e и T erm inate . Со­ бытие I n i t i a l i z e возникает при создании нового экземпляра класса, а событие T er­ m in a te — при уничтожении объекта. Событие I n i t i a l i z e можно использовать для установки значений свойств, принятых по умолчанию.

Шаблон для процедур обработки событий выглядит следующим образом.

P riv a te

Sub C la s s _ I n it ia liz e ()

^

1

Здесь

находится код инициализации

 

End

Sub

 

 

P riv a te

Sub C la s s _ T e rm in a te ()

 

1

Здесь

находится код уничтожения

 

End

Sub