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

Глава 13. Работа с пользовательскими формами

427

в текстовом поле данных (вы не знаете, ввел ли пользователь свое имя). Следующий код добавлен в процедуру O K B u tto n _ C lic k перед оператором вставки текста на рабочий лист. Он проверяет, ввел ли пользователь свое имя (на самом деле проверяется наличие любого текста) в поле T e x tB o x . Если текстовое поле T e x tB o x осталось пустым, то вы­ водится соответствующее сообщение, и текстовое поле снова становится активным. Та­

ким

образом, пользователь сможет приступить к введению своего имени. Оператор

E x it

Sub завершает процедуру без выполнения дополнительных действий.

'

Проверка ввода имени

 

I f

TextName. T ext = "" Then

 

 

MsgBox "Введите имя."

 

 

TextName. SetFocus

 

 

E x it Sub

 

End I f

Ура,заработало!

После внесения соответствующих исправлений диалоговое окно будет работать безу­ пречно (не забудьте проверить работоспособность комбинаций клавиш). На практике вам может потребоваться собрать много дополнительной информации, а не только све­ дения об имени и поле пользователя. Но в любом случае следует применять изложенные выше принципы. Вам останется добавить в диалоговое окно большее количество эле­ ментов управления.

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

Рабочая книга с рассмотренным выше примером находится на прилагаемом компакт-диске в файле g e t name and se x .xlsm .

События объекта UserForm

Каждый элемент управления в форме U se rF o rm (а также сам объект U serF orm ) разрабатывается для того, чтобы реагировать на определенные события. Эти события возникают в результате действий пользователя или генерируются программой Excel. На­ пример, щелчок на кнопке (C om m andB utton) приводит к возникновению события C lick объекта C om m andB utton. Можно создать код, который будет выполняться при возникновении определенного события.

Некоторые действия приводят к возникновению сразу нескольких событий. Напри­ мер, щелчок на кнопке со стрелкой, направленной вверх, в элементе управления S p in - Button приведет к возникновению события S p in U p и события Change. После того как пользовательское диалоговое окно будет отображено с помощью метода Show, Excel

сгенерирует события

I n i t i a l i z e и A c t iv a t e объекта U serF orm . (На самом деле

событие I n i t i a l i z e

генерируется после загрузки объекта U se rF o rm в память и до

его фактического отображения.)

Перекрестная ссылка

В Excel также поддерживаются события, связанные с объектами Sheet (Лист), C ha rt (Диаграмма) и ThisW orkbook (ЭтаКнига). Эти события будут подробно рассмотрены в главе 18.

Глава 13. Работа с пользовательскими формами

429

События объекта UserForm

Несколько событий непосредственно связано с отображением и выгрузкой объекта UserForm.

Initialize. Происходит перед загрузкой и отображением формы UserForm. Не происходит, если объект UserForm до этого был скрыт.

Activate. Происходит в момент активизации объекта UserForm.

Deactivate. Происходит в момент деактивизации объекта UserForm. Не про­ исходит при сокрытии формы UserForm.

QueryClose. Происходит перед выгрузкой объекта UserForm.

Terminate. Происходит после выгрузки объекта UserForm.

Примечание

Важно правильно выбрать подходящее событие для процедуры обработки событий, а также проанализировать порядок выполнения событий. Исполь­ зование метода Show приводит к возникновению событий I n i t i a l i z e и A c­ t iv a t e (в указанном порядке). Применение команды Load приводит к вызо­

ву события

I n i t i a l i z e . Команда U nload вызывает события Q ueryClose

и T e rm in a te

(в указанном порядке). Метод Hide не приводит к вызову ка­

ких-либо событий.

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

На прилагаемом компакт-диске находится рабочая книга u se rfo rm e v e n ts .x ls m , которая управляет описанными событиями и отображает в момент возникновения события специальное сообщение. Если изучение событий объекта UserForm вызывает у вас затруднения, то, проанализиро­ вав код этого примера, вы получите ответы на многие вопросы.

События элемента управления SpinButton

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

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

На прилагаемом компакт-диске содержится рабочая книга u se rfo rm e v e n ts .x ls m , которая демонстрирует применение событий, генерируемых объектами S p in B u tto n и UserForm (первый содержится во втором). Рабо­ чая книга включает несколько процедур обработки событий — по одной для каждого события элемента управления S p in B u tto n и объекта userForm. Каждая из этих процедур создает окно сообщения, которое указывает на возникновение соответствующего события.

В табл. 13.1 перечислены события элемента управления SpinButton.

430 Часть IV. Пользовательские формы

Таблица 13.1. События элемента управления S p in B u tto n

Событие

Описание

A fte rU p d a te

Происходит после того, как элемент управления изменяется с по­

 

мощью пользовательского интерфейса

BeforeDragO ver

Происходит в процессе выполнения операции перетаскивания объекта

BeforeDropO rPaste

Происходит перед тем, как пользователь отпустит перетаскиваемый

 

объект или скопирует его из буфера обмена

BeforeUpdate

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

Change

Происходит в момент изменения свойства Value

E n te r

Происходит перед тем, как элемент управления S pinB utton будет

 

активизирован после другого элемента управления этой же формы

 

UserForm

E rro r

Происходит в момент обнаружения элементом управления ошибки.

 

При этом элемент управления не может передать сведения об

 

ошибке вызывающей программе

E x it

Происходит непосредственно перед деактивизацией элемента

 

управления с последующей активизацией другого элемента управ­

 

ления текущей формы

KeyDown

Происходит, когда пользователь нажимает клавишу, и активизиру­

 

ется объект

KeyPress

Происходит, когда пользователь нажимает клавишу на алфавитно-

 

цифровой клавиатуре

KeyUp

Происходит, когда пользователь отпускает клавишу, а объект оста­

 

ется активным

SpinDown

Происходит, когда пользователь щелкает на нижней (или левой)

 

кнопке элемента управления S pinB utton

SpinUp

Происходит, когда пользователь щелкает на верхней (или правой)

 

кнопке элемента управления S pinB utton

Пользователь может управлять объектом S p in B u tto n с помощью мыши или (если элемент управления активен) клавиш управления курсором.

События мыши

Когда пользователь щелкает мышью на верхней кнопке элемента управления S p in ­ B u tto n , происходят следующие события:

1)E n te r (генерируется только в том случае, если элемент управления неактивен);

2)Change;

3)SpinUp.

События клавиатуры

Пользователь может нажать клавишу <ТаЬ> для того, чтобы сделать активным эле­ мент управления S p in B u tto n . Только после этого можно использовать клавиши управления курсором для изменения значения элемента управления. Если все именно так и происходит, то события генерируются в следующем порядке:

S p in B u tto n

432

Часть IV. Пользовательские формы

Представленная далее процедура выполняется каждый раз при возникновении собы­ тия Change элемента управления S p in B u tto n . Таким образом, процедура выполняет­ ся тогда, когда пользователь щелкает на элементе управления S p in B u tto n или изменя­ ет его значение, нажав одну из клавиш управления курсором.

P riv a te Sub

S p in B u tto n l_ C h a n g e ()

 

T e x tB o x l. T e xt =

S p in B u tto n l.V a lu e

 

End Sub

 

 

 

Процедура

просто

приравнивает значение свойства V a lu e

элемента управления

S p in B u tto n

к свойству T e x t элемента управления T e x t Box.

В данном случае эле­

менты управления имеют имена, заданные по умолчанию ( S p in B u tto n l и T e x tB o x l). Если пользователь введет значение непосредственно в элемент управления TextBox, то будет сгенерировано событие Change, после чего должен выполняться следующий код.

P riv a te Sub

T extB o xl_C h an ge ()

 

 

NewVal =

V a l(T e x tB o x l. T e x t)

 

 

I f NewVal

>=

S p in B u tto n l.M in

And

_

NewVal

<=

S p in B u tto n l. Max

Then

_

S p in B u tto n l.V a lu e = NewVal

 

 

End Sub

 

 

 

 

Эта процедура начинается с вызова функции VBA V a l, которая преобразует текст элемента управления T e x tB o x в числовое значение (если элемент управления T extB ox содержит строку, то функция V a l возвращает значение 0). Следующий оператор опре­ деляет, попадает ли значение в указанный диапазон допустимых значений. Если это так, то свойство V a lu e элемента управления S p in B u tto n устанавливается равным значе­ нию, которое введено в поле элемента управления T e x tB o x .

Пример организован таким образом, что щелчок на кнопке ОК (которая называется O K B u tto n ) передает значение элемента управления S p in B u tto n в активную ячейку.

Процедура обработки события C lic k

элемента управления C om m andB utton выглядит

следующим образом.

 

 

P riv a te Sub

O K B u tto n _ C lic k ()

 

'

Введите

значение в активную

ячейку

 

I f

C S tr(S p in B u tto n l.V a lu e ) =

T e x tB o x l. T e xt Then

 

A c tiv e C e ll = S p in B u tto n l.V a lu e

 

U nload

Me

 

 

 

E lse

"Неправильное

зн а ч е н и е .", v b C r it ic a l

 

MsgBox

 

 

T e x tB o x l. SetFocus

 

 

 

 

T e x tB o x l. S e lS ta rt =

0

 

 

 

T e x tB o x l. S e lL e n g th = L e n (T e x tB o x l. T e x t)

 

End

I f

 

 

 

End

Sub

 

 

 

Данная процедура выполняет последнюю проверку: анализируются текст, введенный в поле элемента управления T e x tB o x , и значения элемента управления S p in B u tto n . Такая процедура обрабатывает ситуации неверного ввода данных. Например, если поль­ зователь введет в поле элемента управления T e x tB o x текст Зг, то значение элемента управления S p in B u tto n не изменится, а результат, который помещается в активную ячейку, будет отличным от ожидаемого. Обратите внимание, что значение свойства V a lu e элемента управления S p in B u tto n преобразуется в строку с помощью функции C S tr. Это позволяет предотвратить ошибку, которая возникает, когда числовое значение сравнивается с текстовым. Если значение элемента управления не соот­