Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать
I m p o r t R a n g e .

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

843

Объект уничтожается (и освобождается выделенная для него память), когда проце­ дура или модуль, в котором он объявлен, завершает свое выполнение. Объект можно уничтожить в любой момент, присвоив ему значение N othing. Следующий оператор уничтожает объект, который называется MyObj e c t:

Set M yO bject = N o th in g

Модуль класса CSVFileClass

Пример, приведенный в этом разделе, определяет такой класс объектов, как C S V ­ F i l e C l a s s . Описанный в этом модуле класс имеет два свойства и два метода.

• Свойства

 

E xportR ange — предназначено для

чтения и записи. Указывает диапазон

 

ячеек рабочего листа, который будет экспортирован в файл формата CSV.

Im portR ange — предназначено для

чтения и записи. Указывает диапазон,

в который будет импортирована информация из файла формата CSV.

Методы

I m p o r t — используется для импортирования информации из файла в формате

CSV, который определяется значением аргумента C S V F ile N a m e . Информация импортируется в диапазон, обозначенный свойством

E x p o r t — используется для экспортирования диапазона, определенного значением свойства E x p o r t R a n g e , в файл формата CSV, который указывается значением аргумента C S V F ile N a m e .

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

Рассматриваемый в этом разделе пример находится на прилагаемом к книге компакт-диске в файле csv c la s s . xlsm .

П еременные уровня модуля класса

Модуль класса должен поддерживать собственные локальные переменные, которые отражают значения свойств объекта. Модуль класса C S V F i l e C l a s s содержит две пе­ ременные, которые используются для хранения значений свойств. Такие переменные объявляются в начале модуля.

P riv a te

RangeToExport

As

Range

P riv a te

Im p o rtT o C e ll

As

Range

Здесь R a n g e T o E x p o r t — это объект R a n g e , который представляет экспортируе­ мый диапазон. I m p o r t T o C e l l является объектом R a n g e , представляющим верхнюю левую ячейку того диапазона, в который будут импортироваться данные из файла в фор­ мате CSV. Эти переменные получают значения с помощью процедур P r o p e r t y G e t и P r o p e r t y L e t (см. следующий раздел).

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

П роцедуры свойств

Процедуры

свойств модуля

класса C S V FileC lass показаны ниже.

Процедуры

P ro p e rty

Get используются

для получения значения переменной, а

процедуры

P ro p e rty

L et — для установки значения переменной.

 

P ro p e rty

Get

E xportR ange()

As

Range

 

Set ExportRange = RangeToExport

 

End P ro p e rty

 

 

 

 

P ro p e rty

L e t

E xp ortR a ng e(rn g

As Range)

 

Set RangeToExport = rn g

 

 

 

End P ro p e rty

 

 

 

 

P ro p e rty

Get

Im po rtR an ge ()

As

Range

 

Set Im portRange = Im p o rtT o C e ll

 

End P ro p e rty

 

 

 

 

P ro p e rty

L e t

Im po rtR an ge (rng

As Range)

 

Set Im p o rtT o C e ll = rn g

End P ro p e rty

П роцедуры м етодов

Модуль класса C S V F ileC lass содержит две процедуры, которые представляют ме­ тоды класса. Эти процедуры рассматриваются в следующем разделе.

П роцедура E x p o r t

Процедура E x p o rt вызывается каждый раз при обращении к методу E xport. Про­ цедура принимает один аргумент: полное имя файла, который будет хранить экспорти­ руемый диапазон. Процедура обеспечивает базовый уровень обработки ошибок. Напри­ мер, проверяется наличие значения у свойства ExportR ange. Для этого проверяется значение переменной RangeToExport. Процедура создает обработчик для возникаю­ щих ошибок.

Sub

Export(CSVFileNam e)

 

CSV

 

'

Экспортирует диапазон в файл

 

 

I f

RangeToExport Is N o th in g

Then

не определен"

 

MsgBox

"Экспортируемый

диапазон

 

 

E x it

Sub

 

 

 

 

End

I f

 

 

 

 

 

 

On

E rro r

GoTo E rrH a nd le

=

F alse

 

 

A p p lic a tio n .S c re e n U p d a tin g

 

 

Set

ExpBook = W orkbooks.A dd(xlW orksheet)

 

R angeToE xport. Copy

 

 

 

 

A p p lic a tio n .D is p la y A le r ts

=

F alse

 

 

W ith ExpBook

 

 

 

 

 

. S h e e ts (1 ) . Paste

 

 

F ile F o rm a t: =xlCSV

 

 

.SaveAs

FileN am e: =CSVFileName/

 

 

.C lose

SaveChanges: =False

 

 

 

End

W ith

 

 

 

 

 

 

A p p lica tio n .C u tC o p yM o d e =

F alse

 

 

A p p lic a tio n .S c re e n U p d a tin g

= True

 

 

A p p lic a tio n .D is p la y A le r ts

=

True

 

 

E x it Sub

 

 

 

 

 

E rrH a n d le :

 

 

 

 

 

ExpBook. C lose SaveChanges: =False

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

 

 

845

A p p lica tio n .C u tC o p yM o d e

=

F alse

A p p lic a tio n .S c re e n U p d a tin g

=

True

A p p lic a tio n .D is p la y A le r ts

=

True

MsgBox "Ошибка

" & E rr

& vb C rLf & vb C rL f & E r r o r ( E r r ) , _

v b C r it ic a l,

"Ошибка

метода экспортирования"

End Sub

 

 

 

 

Процедура E x p o r t при выполнении копирует указанный с помощью переменной R a n g e T o E x p o r t диапазон во временную рабочую книгу. После этого рабочая книга сохраняется в файле формата CSV, и файл закрывается. Так как обновление экрана не выполняется, пользователь не видит происходящего. Если возникнет ошибка (например, будет указано неверное имя файла), процедура перейдет к метке E r r H a n d l e и отобра­ зит окно сообщения, которое содержит номер ошибки и ее описание.

П роцедура im p o r t

Процедура I m p o r t импортирует данные из файла C S V , который указан с помощью аргумента C S V F ile N a m e . Содержимое файла копируется в диапазон, указанный с по­ мощью значения переменной I m p o r t T o C e ll . Эта переменная используется для хране­ ния значения свойства I m p o r t R a n g e . В данном случае обновление экрана не выполня­ ется — пользователь не должен иметь возможности наблюдать за работой процедуры. Как и E x p o r t , процедура I m p o r t содержит базовые функции обработки ошибок.

Sub

Im port(C SVFileN am e)

CSV в

диапазон

 

1

Импортирование

файла

 

 

I f

Im p o rtT o C e ll Is N o th in g

Then

 

 

 

MsgBox "Диапазон

для

импорта не определен

"

 

 

E x it

Sub

 

 

 

 

 

 

 

End

I f

 

 

 

 

 

 

 

 

I f

CSVFileName

= ""

Then

 

 

 

 

 

MsgBox "He

определено имя

импортируемого

файла"

 

 

E x it

Sub

 

 

 

 

 

 

 

End

I f

 

 

 

 

 

 

 

 

On

E rro r

GoTo

E rrH a n d le

 

=

F alse

 

 

A p p lic a tio n . S creenU pdating

 

 

A p p lic a tio n .D is p la y A le r ts

=

F alse

 

 

W orkbooks. Open

CSVFileName

 

 

 

 

Set

CSVFile = A ctiveW orkbook

 

 

 

A ctive sh e e t.U se d R a n g e . Copy

D e s tin a tio n := Im p o rtT o C e ll

 

C S V F ile . C lose

SaveChanges: =False

 

 

A p p lic a tio n . S creenU pdating

=

True

 

 

A p p lic a tio n .D is p la y A le r ts

=

True

 

 

E x it Sub

 

 

 

 

 

 

 

E rrH a n d le :

 

 

 

 

 

 

 

 

C S V F ile . C lose

Savechanges: =False

 

 

A p p lic a tio n .S c re e n U p d a tin g

= True

 

 

A p p lic a tio n .D is p la y A le r ts

=

True

 

 

MsgBox "Ошибка

" & E rr

& v b C rL f & vb C rL f & E r r o r ( E r r ) , _

 

 

v b C r it ic a l,

"Ошибка

метода импортирования

"

End Sub

 

 

 

 

 

 

 

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

847

Sub

E xportA R ange()

New C S V FileC lass

 

 

Dim

CSVFile As

 

 

W ith

CSVFile

= A ctive W in do w . R an ge S e lectio n

 

.E xportRange

 

.E x p o rt CSVFileName: =ThisW orkbook. Path

& "\te m p .c s v "

 

End

W ith

 

 

End

Sub

 

 

 

Использовать структуру W ith-End W ith не обязательно. Например, процедура мо­ жет выглядеть следующим образом.

Sub

E xportA R ange()

New

C SV FileC lass

 

Dim C SVFile As

 

C S V F ile . ExportRange

= A ctive W in d o w .R a n g e S e le ctio n

 

C S V F ile . E x p o rt

CSVFileName: =ThisW orkbook. Path & "\te m p .c s v "

End

Sub

 

 

Представленная далее процедура демонстрирует операцию импортирования файла CSV. Данные размещаются начиная с активной ячейки.

Sub Im p o rtA F ile ()

New C SV FileC lass

Dim

C SVFile As

W ith CSVFile

 

On

E rr o r Resume

Next

 

.Im portR ange

= A c tiv e C e ll

 

.Im p o rt

CSVFileName: =ThisW orkbook. Path & "\te m p .c s v "

End

W ith

 

 

I f

E rr <>

0 Then _

 

MsgBox

"Невозможно импортировать " & _

T hisW orkbook.P ath & "\te m p .c s v "

End Sub

VBA может работать с большим количеством экземпляров класса. Следующий код создает массив из трех классов C SV FileC lass.

Sub

E x p o r t3 F ile s ()

 

 

Dim C S V F ile (1 To 3)

As

New C S V FileC lass

 

C S V F ile ( 1 ) .E xportR ange

= Range( "A l:A 2 0 ")

 

C S V F ile ( 2 ) .E xportR ange

= Range( "B 1 : B20")

 

C S V F ile (3) .E xportR ange

= Range( " C l: C20" )

 

For i

= 1 To 3

 

 

 

C S V F ile ( i) . E x p o rt

CSVFileName:= "Файл" & i & " .c s v "

N ext

i

 

 

End

Sub