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

Глава 14. Примеры пользовательских форм

443

зом, предварительно необходимо убедиться, что диапазон является допустимым. Следующий код — это пример одного из способов проверки допустимости вве­ денного значения. Если определено, что значение неправильное, то пользователю выдается сообщение, а элемент управления Ref E d it становится активным, пре­ доставляя возможность ввести корректный диапазон.

On

E rro r

Resume

N ext

Set

UserRange

=

R a n g e (R e fE d itl. T e x t)

I f

E rr.N um ber

<>

0 Then

 

MsgBox "Неправильный диапазон"

 

R e f E d itl. SetFocus

 

E x it

Sub

 

 

End

I f

GoTo

0

 

On

E rro r

 

Пользователь может щелкнуть на вкладке одного из листов при выборе диапазона, применив элемент управления Ref E d it. Поэтому не всегда выбранный диапазон находится на активном рабочем листе. Если пользователем выбран другой лист, то адрес диапазона указывается после имени листа, на котором этот диапазон нахо­ дится. Пример приведен ниже.

Лист2! $А$1: $С$4

Если необходимо получить от пользователя выделение в виде одной ячейки, то можно указать верхнюю левую ячейку выделенного диапазона. В данном случае воспользуйтесь следующим оператором:

Set O neC ell = R a n g e ( R e f E d i t l . T e x t ) . Range( " A l ")

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

©Как отмечалось в главе 12, для выделения диапазона можно воспользовать­ ся методом Excel InputB ox.

Создание заставки

Некоторые разработчики предпочитают отображать определенную вступительную информацию при запуске приложения. Эта методика называется заставкой. Без сомне­ ния, все пользователи видели заставку Excel, которая отображается несколько секунд при запуске программы.

В приложении Excel заставку можно создать с помощью пользовательского диалого­ вого окна. В приведенном ниже примере реализуется автоматическое отображение за­ ставки, которое исчезает по истечении пяти секунд.

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

и Ц у На прилагаемом компакт-диске находится рабочая книга, демонстрирующая описанную в разделе процедуру. Соответствующий файл называется sp la sh scre e n .xlsm .

Для создания заставки выполните следующие действия.

1.Создайте рабочую книгу.

2.Активизируйте редактор Visual Basic Editor (VBE) и вставьте пользовательское

диалоговое окно в проект. Код в этом примере предполагает, что объект

U serForm называется U s e rF o rm l.

1ава 14. Примеры пользовательских форм

445

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

возникновения события A c t iv a t e . Процедура K

i l l The Form просто выгружает

диалоговое окно U se rF o rm из памяти.

 

7. В качестве необязательного действия можно

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

C om m andB utton с именем Cane e l B u t to n , установить его свойство C a n c e l равным T ru e и добавить представленную ниже процедуру обработки события в модуль кода формы U serF orm .

P riv a te Sub C a n c e lB u tto n _ C lic k ()

K illT h e F o rm

End Sub

Таким образом, пользователь сможет закрыть заставку, прежде чем пройдет ука­ занное время задержки. Окно будет закрыто также в результате нажатия клавиши <Esc>. Эту небольшую кнопку можно разместить за другим объектом, чтобы она не была видна.

Jfflb Предупреждение

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

£ПЬ Совет

ЬД Для того чтобы выполнить VBA-процедуру при открытии документа, нужно так отобразить пользовательское диалоговое окно в немодальном режиме, чтобы код продолжал выполняться. Для этого измените процедуру Work-

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

P riv a te Sub W orkbook_Open() U se rF o rm l. Show vbM odeless ' другой код

End Sub

Отключение кнопки закрытия пользовательского диалогового окна

Если пользовательское диалоговое окно уже отображено на экране, щелчок на кнопке Закрыть (Close) (в правом верхнем углу) приведет к выгрузке формы U se rF o rm из па­ мяти. Иногда этого допускать нельзя. Например, иногда требуется, чтобы диалоговое окно U serForm закрывалось только после щелчка на специальной кнопке Command­ Button. Несмотря на то что реально отключить кнопку Закрыть невозможно, вы впра­ ве предотвратить закрытие диалогового окна, вызванное щелчком на этой кнопке. Для этого воспользуйтесь обработчиком события Q u e ry C lo s e .

Следующая процедура, которая расположена в модуле кода диалогового окна U se r­ Form, выполняется перед закрытием формы (т.е. в момент возникновения события QueryClose).

Private

Sub

UserForm _QueryClose

_

(Cancel

As In te g e r, CloseMode

As In te g e r)

I f

CloseMode = vbForm ControlM enu Then

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

MsgBox "Щелкните на кнопке ОК для закрытия формы." Cancel = True

End I f End Sub

Процедура U s e rF o rm _ Q u e ry C lo s e использует два аргумента. Аргумент C lose ­ Mode содержит значение, которое указывает на причину возникновения события Query - C lo se . Если значение аргумента C loseM ode равно vb F o rm C o n tro lM e n u (встроенная константа), значит, пользователь щелкнул на кнопке Закрыть. В таком случае будет отобра­ жено сообщение; аргумент C a n ce l устанавливается равным T ru e , и форма не закрывается.

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

Рассматриваемый в этом разделе пример можно найти на прилагаемом к книге компакт-диске в файле q u e ry c lo s e demo. xlsm .

Примечание

Имейте в виду, что пользователь может нажать клавиши <Ctrl+Break>, пре­ кратив тем самым выполнение макроса. В рассматриваемом примере нажа­ тие клавиш <Ctrl+Break> во время отображения формы UserForm на экране приведет к тому, что пользовательское диалоговое окно будет закрыто. Во избежание этого выполните следующий оператор до отображения пользо­ вательского диалогового окна:

A p p lic a tio n . EnableC ancelKey = x lD is a b le d

Прежде чем добавить этот оператор, удостоверьтесь, что в приложении нет ошибок. В противном случае возникает опасность формирования бесконеч­ ного цикла.

Изменение размера диалогового окна

Во многих приложениях используются окна, которые могут изменять собственные размеры. Например, высота диалогового окна Excel Найти и заменить (Find and Replace), которое отображается после выбора команды Главная^Редактирование^ Найти и выделить1^Заменить (Home^Editing^Find & Select^Replace), увеличивается после щелчка на кнопке Параметры (Options).

В рассматриваемом в этом разделе примере демонстрируется предоставление пользо­ вательскому диалоговому окну возможности динамически изменять свой размер. Изме­ нение размера диалогового окна осуществляется путем изменения значений свойств

W id th и H e ig h t объекта U serF orm .

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

Обратитесь к главе 15, в которой рассматривается пример формы User­ Form, размер которой изменяется путем перетаскивания нижнего правого угла окна.

На рис. 14.5 показано первоначальное диалоговое окно, а на рис. 14.6 показано это же окно после щелчка на кнопке Параметры (Options). Обратите внимание на то, что над­ пись на кнопке изменяется в зависимости от размера диалогового окна.

Глава 14. Примеры пользовательских форм

449

' В е р ти к а л ь н а я п р о к р у т к а

 

W ith S crollB arR ow s

 

 

.M in

= 1

 

 

 

.Max

= A ctive S h ee t.U se dR a ng e . Rows. Count

 

.V alue = A ctive W in d o w .S cro llR o w

 

.LargeChange

=

25

 

.SmallChange

=

1

 

End W ith

 

 

 

 

End Sub

 

 

 

 

Эта процедура позволяет устанавливать значения различных свойств элементов управления S c r o llB a r . Значения определяются на основе данных, полученных из ак­ тивного окна. При использовании элемента управления S c r o l lB a r Zoom выполняется

процедура S c r o llB a r Z o o m _ C h a n g e (которая приведена

ниже). Она устанавливает

значение свойства Zoom объекта A c tiv e W in d o w равным

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

элемента управления S c r o llB a r . Кроме того, изменяется текст подписи, которая пред­ ставляет текущий масштаб рабочего листа.

Private

Sub S crollB arZoom _C hange()

W ith

A ctiveW indow

.Zoom = S cro llB a rZ o o m .V a lu e LabelZoom = .Zoom & "%"

End W ith End Sub

Прокрутка листа осуществляется с помощью двух процедур. Эти процедуры устанав­ ливают значение свойств S c r o llR o w и S c r o l l C olu m n s объекта A c tiv e W in d o w равными значениям свойств V a lu e элементов управления S c r o llB a r .

Private Sub S cro llB a rC o lum ns_C h an ge ()

ActiveW indow . S cro llC o lu m n

= S c ro llB a rC o lu m n s .V a lu e

End Sub

 

Private Sub S crollB arR ow s_C hange()

A ctive W in do w .S crollR ow =

S cro llB a rR o w s .V a lu e

End Sub

 

Совет

&Вместо события change в предыдущих процедурах лучше обратиться к со ­ бытию s c r o ll. Разница заключается в том, что последнее событие наступа­ ет при прокрутке и масштабировании документа. Для использования собы­ тия S c r o ll просто включите change в название процедуры s c r o ll.

Использование элемента управления L is t B o x

Элемент управления L is t B o x довольно гибкий в использовании, но работа с ним может оказаться достаточно сложной. В данном разделе приведен ряд простых примеров

распространенных методик использования элемента управления L is tB o x .

Примечание

В большинстве случаев методы, описанные в этом разделе, могут приме­ няться и для работы с элементом управления ComboBox.

1Зак. 3107