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

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

433

ветствует содержимому элемента управления T e x tB o x , то на экране отображается спе­ циальное сообщение. Причем объект T e x tB o x активен, а его содержимое — выделено (с помощью свойств S e lS t a r t и S e lL e n g th ). Таким образом, пользователю проще исправить неправильные значения.

О свойстве Tag

Каждый объект UserForm и каждый элемент управления имеет свойство Tag. Оно не представляет конечные данные и по умолчанию не имеет значения. Свойство Tag мож­ но использовать для хранения информации, которая будет применена в программе.

Например, можно создать набор элементов управления TextBox в пользователь­ ском диалоговом окне. От пользователя требуется ввести текст только в некоторые из них. В отдельные поля вводить текст необязательно. Можно применять свойство Tag для идентификации полей, которые нужно заполнять. В таком случае значение свойст­ ва Tag — это строка, например, R equired. Поэтому при написании кода обработки вве­ денных пользователем данных можно ссылаться на свойство Tag.

Приведенный ниже пример представляет собой функцию, которая проверяет все элементы управления TextB ox объекта U serForm l и возвращает количество пустых текстовых полей, которые “ требуют” ввода информации.

Function

EmptyCount ()

 

 

Dim c t l As C o n tro l

 

 

EmptyCount=

0

 

 

 

For Each

c t l

In

U se rF o rm l. C o n tro ls

I f

TypeN am e(ctl)

=

"T extB ox" Then

 

I f

c t l . T a g

=

"R e q u ire d " Then

 

 

I f

c t l . T e x t =

"" Then

 

 

 

EmptyCount

= EmptyCount + 1

 

 

End

I f

 

 

 

 

End

I f

 

 

 

 

End I f

 

 

 

 

 

Next

c t l

 

 

 

 

 

End F un ction

 

 

 

 

 

Работая с пользовательскими диалоговыми окнами, можно придумать другое дос­ тойное применение для свойства Tag.

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

При работе с элементами управления, находящимися в форме Use г Form, код VBA обычно содержится в модуле кода объекта Use г Form. Кроме того, на элементы управ­ ления диалогового окна можно ссылаться из модуля кода VBA общего назначения. Для выполнения этой задачи необходимо задать правильную ссылку на элемент управления, указав имя объекта Use г Form. В качестве примера рассмотрим процедуру, которая вве­ дена в модуле кода VBA. Эта процедура отображает пользовательское диалоговое окно, которое называется U s e rF o rm l.

Sub GetData ()

U serForm l. Show

End Sub

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

Предполагается, что в диалоговом окне U s e rF o rm l содержится текстовое поле (T e x tB o x l) . Вам же необходимо указать значение текстового поля по умолчанию. Про­ цедуру можно изменить следующим образом.

Sub

G e tD ata ()

 

U se rF o rm l. T e x tB o x l. V alue = "Джон Доу"

 

U se rF o rm l. Show

End

Sub

Еще одним способом установки значения по умолчанию является использование со­

бытия

I n i t i a l i z e

объекта U serF orm . Можно написать код процедуры U ser-

F o r m

_ I n it ia liz e ,

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

Ниже представлен соответствующий пример.

P riv a te Sub U s e r F o r m _ In itia liz e ()

T e x tB o x l.V alue

= "Джон Доу"

End Sub

 

Обратите внимание, что при обращении к элементу управления из модуля кода диа­ логового окна необязательно вводить в ссылку имя объекта Use г Form. Подобное опре­ деление ссылок на элементы управления имеет свое преимущество: всегда можно вос­ пользоваться средством A u to L i s t Member, которое позволяет выбирать имена эле­ ментов управления из раскрывающегося списка.

Совет

Вместо того чтобы использовать фактическое имя объекта UserForm, предпоч­ тительнее применить имя Me. В противном случае, если имя объекта UserForm изменится, вам не придется изменять все ссылки (с его участием) в коде.

Использование коллекций элементов управления

Элементы управления пользовательских диалоговых окон образуют отдельную кол­ лекцию. Например, следующий оператор отображает количество элементов управле­ ния в форме U serForm l:

MsgBox U se rF o rm l. C o n tro ls . Count

В VBA не поддерживаются коллекции для каждого типа элемента управления. Напри­ мер, не существует коллекции элементов управления CommandButton. Но тип элемента управления можно определить с помощью функции TypeName. Следующая процедура ис­ пользует структуру For Each для циклического просмотра элементов коллекции Con­ t r o ls . В результате отображается количество элементов управления CommandButton, которые входят в коллекцию элементов управления объекта UserForm l.

Sub

C o u n tB u tto n s ()

 

 

Dim

cbCount

As

In te g e r

 

Dim

c t l

as

C o n tro l

 

cbCount

= 0

 

In

U se rF o rm l. C o n tro ls

 

For

Each

c t l

 

I f

TypeN am e(ctl) = "CommandButton" Then _

 

 

 

cbCount

=

cbCount + 1

 

Next

c t l

 

 

 

 

 

MsgBox

cbCount

 

End

Sub