ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 18.06.2025
Просмотров: 9005
Скачиваний: 0
Рис.14,7.Элементыуправления ScrollBar позволяют прокручивать лист и изменять его масштаб
Код данного примера достаточно прост:
Private Sub UserForm_Initialize{) LabelZoom.Caption = ActiveWindow.Zoom
1 Масштабирование With ScrollBarZoom
.Min = 10
.Max = 400
.SmallChange = 1
.LargeChange =10
.Value - ActiveWindow.Zoom End With
' Горизонтальная прокрутка With ScrollBarColumns
.Min = 1
.Max = 256
.Value = ActiveWindow.ScrollColumn
.LargeChange = 2 5
.SmallChange = 1 End With
' Вертикальная прокрутка With ScrollBarRows
.Min = 1
.Max = ActiveSheet.Rows.Count
.Value = ActiveWindow.ScrollRow
.LargeChange = 25
.SmallChange = 1 End With
End Sub
Эта процедура устанавливает значения различных свойств элементов управления ScrollBar. Значения определяются на основе данных, полученных из активного диалогового окна.
При использовании элемента управления ScrollBarZoom выполняется процедура ScrollBarZoom__Change (которая приведена ниже). Эта процедура устанавливает нначение свойства Zoom объекта ActiveWindow равным значению свойства Value элемента управления ScrollBar. Кроме того, изменяется текст подписи с целью отразить текущий масштаб рабочего листа.
Private Sub ScrollBarZoom_Change()
With ActiveWindow
.Zoom = ScrollBarZoom.Value
LabelZoom = .zoom & "%"
End With End Sub
Прокрутка листа осуществляется с помощью двух процедур. Эти процедуры устанавливают значение свойств ScrollRow и Scrol lColuums объекта ActiveWindow равными значениям свойств Value элементов управления ScrollBar.
Часть IV. Работа с пользовательскими формами |
371 |
Private Sub ScrollBarColumns_Change()
ActiveWindow.ScrollColumn = ScrollBarColuims.Value
End Sub
Private Sub ScrollBarRows_Change()
ActiveWindow.ScrollRow = ScrollBarRows-Value
End Sub
Использование элемента управления ListBox
Элемент управления ListBox довольно гибкий в использовании, но работа с ним может оказаться достаточно сложной. В данном разделе приведен ряд простых примеров, которые демонстрируют распространенные методики использования элемента управления ListBox.
В большинстве случаев методики, описанные в этом разделе, применяются и к элементу управления ComboBox.
Об элементе управления ListBox
Ниже изложены рекомендации, о которых необходимо помнить при работе с элементом управления ListBox. Примеры данного раздела наглядно иллюстрируют эти советы.
•Опции списка элемента управления ListBox могут извлекаться из диапазона ячеек (определяемого свойством RowSource) или добавляться с помощью VBA (для этого используется метод Add It em).
•Элемент управления ListBox может быть применен для выделения одной и нескольких опций. Соответствующее повеление определяется значением свойства MultiSelect .
•Если элемент управления ListBox не настроен на выделение нескольких опций, то значение элемента управления ListBox может связываться с ячейкой листа с помощью свойства ControlSource .
•Элемент управлений ListBox может отображаться без предварительно выбранной оп-
ции (для этого необходимо установить свойство L i s t l n d e x в значение -1). Но как только пользователь выделит одну из опций списка, снять выделение будет невозможно.
•Элемент управления ListBox можег содержать несколько столбцов (что указывается в свойстве ColumnCount) и даже описательные заголовки (для этого используется свойство ColumnHeads).
•Вертикальный размер элемента управления ListBox, помещенного в пользовательское диалоговое окно, не всегда совпадает с вертикальным размером объекта UserForm на экране.
•Опции списка элемента управления List Box могут отображаться в виде флажков, если разрешено выделение нескольких элементов, или в виде переключателей, если под-
держивается только единичное выделение. Это поведение определяется значением свойства L i s t S t y l e .
Для получения полной информации о свойствах и методах элемента управления |
|
ListBoxобратитеськдиалоговомусправочномуруководству. |
|
372 |
Глава 14. Примеры пользовательских форм |
Добавление опций в элемент управления ListBox
Перед отображением пользовательского диалогового окна, которое содержит элемент управления ListBox, необходимо заполнить элемент управления ListBox необходимыми опциями. Элемент управления ListBox заполняется на этапе разработки проекта посредством указания диапазона ячеек, которые содержат необходимые данные. Его также можно заполнить на этапе выполнения, воспользовавшись кодом VBA для добавления всех опций списка.
Примеры настоящего раздела предполагают следующее.
•Используется диалоговое окно UserForrn с именем UserForml.
•Диалоговое окно UserForml содержит элемент управления ListBox, который называется ListBoxl.
•Рабочая книга содержит лист, называющийся Лист1, в диапазоне А1:А12 которого определены опции, отображаемые в элементе управления ListBox.
Добавление опций в элемент управления ListBox на этапе разработки
Для того чтобы иметь возможность добавить опции элемента управления ListBox на этапе разработки, элементы должны храниться в диапазоне ячеек рабочей книги. Воспользуйтесь свойством RowSource для указания диапазона, который содер-
жит опции элемента управления ListBox. На рис. 14.8 показано окно Properties для элемента управления ListBox. Свойство RowSource установлено в значение Лист1 !А1: А12. Когда диалоговое окно UserForm отображается на экране, элемент управления ListBox содержит двенадцать опций из этого диапазона. Опции добавляются в элемент управления ListBox на этапе разработки, сразу после того, как диапазон определяется в качестве значения свойства RowSource.
Рис. 14.8. Установка значения свойства RowSoarceна этаперазработки
Удостоверьтесь, что в значении свойства RowSource присутствует имя листа. В противном случае элемент управления ListBox будет применять указанный диапазон в активном рабочем листе. В некоторых случаях необходимо идентифицировать диапазон максимально точно, указав даже имя рабочей книги. Например: I Книга!, x l s ]ЛИСТ! 1А1.-А12,
Добавление опций в элемент управления ListBox на этапе выполнения
Чтобы добавить опции элемента управления L i s t B o x на этапе выполнения, необходимо реализовать следующее.
•С помощью кода определить значение свойства RowSource для того, чтобы указать диапазон, хранящий необходимые данные.
•Создать код, используюший метод Adultem для добавления опций в элемент управ-
ления L i s t B o x .
ЧастьIV.Работаспользовательскимиформами |
373 |
Значение свойства RowSource устанавливается с помощью кода, а ке в окне Properties. Например, представленная далее процедура устанавливает значения свойства RowSource элемента управления ListBox перед тем, как отображать диалоговое окно UserForm. В этом случае опции состоят из значений в ячейках диапазона Categories рабочего листа Budget.
UserForml.ListBoxl.RowSource = "Budget!Categories" UserForml.Show
Если опция элемента управления Listliox не содержатся в диапазоне ячеек.листа, то можно создать специальный код VBA для заполнения элемента управления ListBox перед кодом отображения диалогового окна. Следующая процедура заполняет элемент управления ListBox названиями месяцев года с помощью метода Addltem.
Sub ShowUserForm2()
' Заполнение элемента управления ListBox With UserForm2.ListBoxl
.RowSource=""
.Addltem "Январь"
.Addltem "Февраль"
.Addltem "Март"
.Addltem "Апрель"
.Addltem "Май"
.Addltem "Июнь"
.Addltem "Июль"
.Addltem "Август"
.Addltem "Сентябрь"
.Addltem "Октябрь"
.Addltem "Ноябрь"
.Addltem "Декабрь" End With UserForm2.Show
End Sub
В предыдущем коде свойство Rowsource приравнивалось пустой строке с целью избежать потенциальной ошибки, когда в окне Properties свойства RowSource элемента управления ListBox имеет определенное значение. Если попытаться добавить опции в элемент управления ListBox с ненулевым значением свойства RowSource,тобудетвыведеносообщениеобошибке("Permission denied").
Кроме того, можно использовать метод Addltem для получения опций элемента управления ListBox, хранящихся в диапазоне ячеек. Ниже рассмотрен пример заполнения элемента управления ListBox содержимым диапазона Al :А12 листа Лист!.
For Row = 1 То 12
UserForml.ListBoxl.Addltem Sheets("Лист1"}.Cells(Row, 1) Next Row
Если данные хранятся в одномерном массиве, то можно назначить массив элементу управления с помощью единственной инструкции. Предположим, что у нас есть массив dData, который содержит 50 элементов. Следующий оператор создает список из 50 опций на основе элемента управления ListBox, называющегося ListBoxl:
ListBoxl . Lis t я dData
Добавление в элемент управления ListBox только уникальных опций
В определенных случаях возникает необходимость в заполнении элемента управления ListBox уникальными (неповторяющимися; опциями из существующего списка. Предположим,
374 |
Глава 14. Примеры пользовательских форм |
у нас есть лист, который содержит данные о потребителях. Один из столбцов может содержать названия стран (рис. 14.9). Необходимо заполнить элемент управления ListBox новациями стран, в которых проживают истребители.
Рис. 14.9. Объект Collection используется для заполнения элемента управления ListBox уни-
кальпыми значениями из столбца В
Одна из техник заполнения предполагает использование объекта C o l l e c t i o n . Элементы в объект C o l l e c t i o n добавляются с помощью следующего синтаксиса:
object.Add item, key, before, a f t e r
Аргумент key, если он используется, содержит уникальную текстовую строку, которая необходима для получения доступа к •элементам коллекцииЕсли к коллекции добавить неуникальньш ключ, то возникнет ошибка, в результате элемент добавлен не будет. Этим можно воспользоваться и создать коллекцию, которая содержит только уникальные элементы.
Представленная далее процедура демонстрирует использование этого способа. Процедура начинается с декларации нового объекта C o l l e c t i o n — NoDupes. Предполагается, что диапазон, называющийся Data, содержит список элементов, часть из которых повторяется.
В коде циклически просматриваются ячейки диапазона, и в коллекцию NoDupes добавляются значения только уникальных ячеек. Кроме того, значение ячейки (преобразованное в строку) используется в качестве значения аргумента key. Применение оператора On Error Resume Next приводит к тому, что в коде VBA игнорируется ошибка, которая возникает при добавлении в коллекцию неуникального ключа. Если возникает ошибка, элемент в коллекцию не добавляется — это именно то поведение, которого требуется добиться. Затем процедура передает элементы коллекции NoDupes в элемент управления ListBox. Диалоговое окно UserForm также содержит подпись, которая указывает количество уникальных элементов коллекции.
Sub P.emoveDuplicatesl ()
Dim AllCells As Range, Cell As Range Dim NoDupes As New Collection
On Error Resume Next
For Each Cell In Range{"Data")
NoDupes.Add Cell.Value, CStr(Cell,Value)
Next Cell
On Error GoTo 0
1Добавить уникальные элементы в элемент управления ListBox Рог Each Item In NoDupes
UserForml.ListBoxl.Addltem Item Next Item
1 Отобразить количество
Часть IV. Работа с пользовательскими формами |
375 |