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

822

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

End W ith

'Удаление временного файла модуля

K i l l M o d u le F ile

MsgBox "Модуль за м енен .", v b ln fo rm a tio n

E x it Sub

E rrH a n d le :

'Произошла ошибка?

MsgBox "ОШИБКА. Модуль не может быть за м енен .", _ v b C r it ic a l

End Sub

Описанная процедура выполняет следующие действия.

1.Сначала в файл экспортируется модуль M odulel (обновленная версия). Файлу присваивается случайное имя, чтобы снизить вероятность перезаписи существую­ щего файла.

2. Из рабочей книги U s e rF o rm .x ls m удаляется модуль M o d u le l (обновляемая версия). Для этого используется метод Remove из коллекции VBCom ponent s.

3. После этого процедура импортирует модуль (сохраненный на первом этапе)

в рабочую книгу U s e rB o o k . x ls m .

4.Удаляется временный файл с обновленной версией модуля.

5.Выводится окно с сообщением, которое содержит информацию о результате об­ новления. Обработка ошибок необходима для своевременного извещения пользо­ вателя о возникновении ошибки.

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

Рассматриваемый в этом разделе пример находится на прилагаемом к книге компакт-диске вдвух файлах: UserBook.xlsm и UpdateUserBook.xlsm.

Использование VBA для создания кода VBA

Пример, приведенный в этом разделе, демонстрирует использование VBA для созда­ ния дополнительного кода VBA. Процедура AddButtonAndCode выполняет следую­ щие действия.

1.Добавляет новый рабочий лист.

2.Добавляет на рабочий лист элемент управления CommandButton.

3.Меняет расположение, размер и название элемента управления Com m andButton.

4.Добавляет процедуру обработки события для элемента управления Command­

B u tto n .

Такая процедура называется C o m m a n d B u tto n l_ C lic k . Она располагается в модуле кода рабочего листа и используется для активизации рабочего листа Лист1.

Ниже приводится код процедуры A d d B u tto n A n d C o d e .

Sub AddButtonAndCode()

Dim NewSheet As W orksheet

Dim NewButton As OLEObject

C o m m a n d B u tto n ) .

826

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

логовом окне в момент его появления на экране. Если просмотреть диалоговое окно в ре­ дакторе VBE, то окажется, что элемент управления на форме отсутствует.

Sub R unTim eB utton()

'Добавление кнопки на этапе выполнения Dim Butn As CommandButton

Set

B utn

= U se rF o rm l. C o n tro ls .A d d ( "Form s. CommandButton.1")

W ith

Butn

 

 

.C a p tio n

= "Добавлено на этапе выполнения "

.W id th

=

100

.Top =

10

 

End

W ith

 

 

U se rF o rm l. Show

End Sub

Ниже приведена процедура D e s ig n T im e B u t t o n . Отличие заключается в том, что

она использует объект D e s ig n e r ,

который содержится в объекте V B C o m p o n e n t . В ча­

стности,

применяется метод A d d

для добавления элемента управления C o m m a n d ­

B u t t o n .

Поскольку процедура обращается к объекту D e s ig n e r , элемент управления

C o m m a n d B u tto n добавляется в диалоговое окно U s e r F o r m так же, как это выполняет­ ся при ручном редактировании диалогового окна.

Sub D e sig n T im e B u tto n ()

'Добавление кнопки на этапе разработки Dim B utn As CommandButton

Set B utn = T h is W o rk b o o k .V B P ro je c t. _ VBComponents( "U se rF o rm l") _

. D e s ig n e r. C o n tr o ls .A d d ( " Form s. CommandButton.1 ")

W ith B utn

 

.C a p tio n

= "Добавлено на этапе разработки"

.W id th =

120

.Top = 4 0

 

End W ith

 

End Sub

 

Добавление 100 элементов управления CoxnmandButton на этапе разработки

Пример данного раздела демонстрирует преимущества использования объекта D e ­ s i g n e r при создании диалоговых окон U s e r F o r m . В этом случае код добавляет 100 элементов управления C o m m a n d B u tto n (которые соответствующим образом располо­ жены и выровнены), устанавливает значение свойства C a p t i o n для каждого элемента управления C o m m a n d B u tto n и создает 100 процедур обработки событий (для каждого элемента управления

Sub A ddlO O B uttons()

Dim UFvbc

As VBComponent

Dim

CMod As

CodeModule

Dim

c t l

As

C o n tro l

Dim

cb

As

CommandButton

Dim

n As

Long, с As Long, r As Long

Dim

code

As

S trin g

Set

UFvbc

=

T hisW orkbook.V B P roject.V B C om ponents( "U se rF o rm l")

'Удаление всех элементов управления

For Each c t l In UFvbc. D e s ig n e r. C o n tro ls

U s e r-
U serF orm .

Глава 28. Управление компонентами Visual Basic

827

U F vb c .D e sig n e r. C o n tro ls . Remove ctl.N a m e

N ext c t l

'Удаление всего кода VBA

UFvbc. CodeModule. D e le te L in e s 1, UFvbc. CodeModule. C ountO fLines

1 Добавление

100

элементов

управления CommandButton

n =

1

 

 

 

 

 

 

 

For

r = 1

To 10

 

 

 

 

 

 

For с = 1 To 10

 

 

 

 

 

Set

cb =

U Fvbc. D e s ig n e r. _

 

C o n tro ls .A d d ( "Form s. CommandButton.1 ")

 

W ith

cb

 

 

 

 

 

 

 

.W id th

=

22

 

 

 

 

.H e ig h t

=

22

 

 

 

. L e f t

=

(c

* 26)

-

16

 

.Top

=

(r

*

26)

-

16

 

.C a p tio n

=

n

 

 

 

End

W ith

 

 

 

 

 

 

'Добавление кода обработки событий

W ith

U Fvbc. CodeModule

 

 

 

code

=

""

 

 

 

 

 

code

=

code

&

"P riv a te

Sub CommandButton" Sc n Sc _

 

"

_ C lic k "

Sc

vbCr

 

 

 

code

=

code

&

"Msgbox

""К н о пка "

Sc n

Sc _

 

" " " " & vbCr

 

 

 

 

code

=

code

&

"End Sub"

 

 

 

. In s e rtL in e s . C ountO fLines +

1,

code

End

W ith

 

 

 

 

 

n

=

n

+ 1

 

 

 

 

 

N ext

с

 

 

 

 

 

 

 

N ext r

End Sub

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

Рассматриваемый в этом разделе пример находится на прилагаемом к книге компакт-диске в файле add ю о b u tto n s .xlsm .

Процедура A d d lO O B u tto n s требует наличия диалогового окна U se rF o rm (под на­ званием U s e rF o rm l). Процедура начинает работу с удаления всех элементов управле­ ния в этом диалоговом окне. Затем удаляется весь код в модуле кода данного диалогово­ го окна. Для этого используется метод D e le te L in e s объекта C odeM odule. Далее до­ бавляются элементы управления C om m andB utton и процедуры обработки события для этих элементов управления с помощью двух циклов F o r - N e x t. Процедуры обработки событий очень просты. Ниже приведен пример одной из них (процедура задана для эле­ мента управления C om m a n d B u tto n l).

P riv a te Sub C om m an dB utton l_ C lick()

MsgBox "Это CommandButtonl"

End Sub

Если нужно отобразить на экране форму после добавления элементов управления на этапе разработки, добавьте следующую инструкцию непосредственно перед оператором

End Sub.

VBA.U serForm s.A d d ( " U se rF o rm l" ) . Show

Вам потребуется немало времени, чтобы выяснить, как необходимо отображать диа­ логовое окно Если интерпретатор VBA генерирует диалоговое окно