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

450

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

Ниже изложены рекомендации, о которых необходимо помнить при работе с элементом управления L is tB o x . Примеры данного раздела наглядно иллюстрируют эти советы.

• Опции списка элемента управления L is t B o x могут извлекаться из диапазона ячеек (определяемого свойством R ow S ou rce) или добавляться с помощью VBA (для этого используется метод A d d ltem ).

Элемент управления L is t B o x может быть применен для выделения одной или

нескольких опций. Соответствующее поведение определяется значением свойства M u l t i S e l e c t .

Если элемент управления L is t B o x не настроен на выделение нескольких опций,

 

то значение элемента управления L is t B o x может связываться с ячейкой листа

 

с помощью свойства C o n t r o lS o u r c e .

Элемент управления L is t B o x может отображаться без предварительно выбран­

 

ной опции (для этого необходимо установить свойство L i s t l n d e x равным -1).

 

Но как только пользователь выделит одну из опций списка, отменить выделение

 

будет невозможно. Исключение из этого правила— значение свойства M u lti-

 

S e l e c t равно T ru e.

Элемент управления L is t B o x может содержать несколько столбцов (что указы­ вается в свойстве C olu m n C ou n t) и даже описательные заголовки (для этого ис­ пользуется свойство C olum nH eads).

Вертикальный размер элемента управления L is tB o x , помещенного в пользова­

тельское диалоговое окно, не всегда совпадает с вертикальным размером объекта U serF o rm на экране.

• Опции списка элемента управления L is t B o x могут отображаться в виде флаж­

ков, если разрешено выделение нескольких элементов, или в виде переключате­ лей, если поддерживается только единичное выделение. Это поведение определя­ ется значением свойства L i s t S t y l e .

Для получения полной информации о свойствах и методах элемента управления L is t B o x обратитесь к интерактивной справке.

Добавление опций в элемент управления ListBox

Перед отображением пользовательского диалогового окна, которое содержит элемент управления L is tB o x , следует заполнить элемент управления L is t B o x необходимыми опциями. Элемент управления L is t B o x заполняется на этапе разработки проекта по­ средством указания диапазона ячеек, которые содержат необходимые данные. Его также можно заполнить на этапе выполнения, воспользовавшись кодом VBA для добавления всех опций списка.

В двух примерах из настоящего раздела предполагается следующее:

используется диалоговое окно U serF orm с именем U ser F o rm l;

диалоговое окно U se r F o r m l содержит элемент управления L is tB o x , который

 

называется L is t B o x l;

рабочая книга содержит лист Л и с т 1 , в диапазоне А1:А12 которого определены

опции, отображаемые в элементе управления L is tB o x .

452

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

Добавление опций в элемент управления L is tB o x на этапе выполнения

Чтобы добавить опции элемента управления L istB o x на этапе выполнения, необхо­

димо реализовать следующее:

с помощью кода определить значение свойства RowSource, чтобы указать диапа­ зон, хранящий необходимые данные;

создать код, использующий метод A ddltem для добавления опций в элемент управления L istB ox .

Как и следовало ожидать, значение свойства RowSource устанавливается с помо­ щью кода, а не в окне Properties. Например, представленная далее процедура устанавли­

вает значения свойства RowSource элемента управления L istB o x перед тем, как ото­ бражается диалоговое окно Use г Form. В этом случае опции состоят из значений в ячей­

ках диапазона C a te g o r ie s рабочего листа Budget.

U se rF o rm l. L is t B o x l. RowSource = "B u d g e t! C a te g o rie s "

U se rF o rm l. Show

Если опции элемента управления L istB o x не содержатся в диапазоне ячеек листа, то можно создать специальный код VBA для заполнения элемента управления ListBox перед кодом отображения диалогового окна. Следующая процедура заполняет окно спи­ ска элемента управления L istB o x названиями месяцев года с помощью метода

Addltem .

Sub ShowUserForm2()

'Заполнение списка

W ith U se rF o rm l. L is tB o x l

RowSource=""

A ddltem

" Я н в а р ь "

A ddltem

" Ф е в р а л ь "

A ddltem

"М а р т "

A ddltem

" А п р е л ь "

A ddltem

"М ай"

A ddltem

"И ю нь"

A ddltem

"И ю л ь "

A ddltem

" А в г у с т "

A ddltem "С е н т я б р ь

A ddltem

" О к т я б р ь "

A ddltem

"Н о я б р ь "

A ddltem

" Д е к а б р ь "

W ith

 

U se rF o rm l. Show

End Sub

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

В предыдущем коде свойство RowSource сначала приравнивалось к пустой строке. Таким образом предотвращалась потенциальная ошибка, которая появляется в том случае, когда в окне Properties свойство RowSource эле­ мента управления L is tB o x имеет определенное значение. Если попытаться добавить опции в элемент управления L is tB o x с ненулевым ^значением свойства RowSource, появится сообщение об ошибке “permission denied” (отсутствуют права доступа).

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

453

Можно также использовать метод A ddltem для выборки опций элемента управления ListBox, хранящихся в диапазоне ячеек. Ниже рассмотрен пример заполнения элемен­ та управления L istB o x содержимым диапазона А1:А12 листа Лист1.

For

Row = 1 То 12

U serF orm l. L is tB o x l .A ddltem Sheets (11Лист1" ) . C e lls (Row, 1)

Next

Row

Использование свойства L is t еще больше облегчает решение задачи. Приведенный

ниже оператор дает тот же эффект, что и предыдущий цикл For N ext.

UserForml. L is t B o x l. L is t = A p p lic a tio n . T ra n sp o se (S h e e ts( _ "Л и с т 1 "). R a n g e ("A 1 :A 1 2 "))

Обратите внимание, что использовалась функция T ranspose, поскольку свойство List настроено на ввод массива-строки, в то время как диапазон ячеек представляет со­ бой массив-столбец.

Если данные хранятся в одномерном (векторном) массиве, можно воспользоваться свойством L is t . Например, предположим, что имеется массив M yList, который со­ держит 50 элементов. Приведенный ниже оператор создает 50-элементный список в эле­ менте управления L istB o x l.

UserForml. L is t B o x l. L is t = M y L is t

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

Примеры из этого раздела находятся на прилагаемом к книге компакт-диске

в файле f i l l lis tb o x .x ls m .

Добавление в элемент управления L is tB o x только уникальных элементов

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

Один из

методов

заполнения

предполагает использование объекта C o lle c tio n .

Элементы в объект C o lle c t io n

добавляются с помощью следующего синтаксиса:

object.Add

ite m ,

key, b e fo re , a f t e r

Аргумент k ey (если он используется) содержит уникальную текстовую строку, кото­ рая необходима для получения доступа к элементам коллекции. Если к коллекции доба­ вить неуникальный ключ, то возникнет ошибка, и в результате элемент добавлен не бу­ дет. Этим можно воспользоваться и создать коллекцию, которая содержит только уни­ кальные элементы.

Представленная далее процедура демонстрирует использование этого способа. Процедура начинается с объявления нового объекта коллекции — NoDupes. Предпо­ лагается, что диапазон, называющийся D ata, содержит список элементов, часть кото­ рых повторяется.