Элементы управления также могут использоваться вне форм. В следующем примере мы используем элементы управления прямо на рабочем листе.
Заметьте, что "Режим дизайнера" ("Design mode") должен быть активирован, для того чтобы изменять элемент управления, который расположен на рабочем листе (и так же должен быть деактивирован, для того чтобы использовать этот элемент управления).
Перед рассмотрением этого примера, давайте посмотрим на это:
Сейчас, мы хотим добавить цвет фона ячеек и выбрать её основываясь на позиции ползунка в определенной площади 30 строк на 10 колонок.
Свойства вертикального ползунка для прокрутки экрана.
Горизонтальный ползунок такой же, за исключением Max : 10.
Далее идет код, который будет запускаться каждый раз, когда идет изменение значения (Value) вертикального ползунка:
'Серый фон в ячейках Cells.Interior.Color = RGB (240, 240, 240) 'Применяем цвет и выбираем ячейку With Cells (ScrollBar_vertical.Value, ActiveCell.Column) 'Определяем ячейку, используя Значение (Value) .Interior.Color = RGB (255, 220, 100) 'Применяем оранжевый цвет .Select 'Выбираем ячейку End With
Этот код запускается когда события Change и Scroll возникают и запустят инструкции в не зависимости от того, по какой части ползунка мы щелкнули.
Далее код для вертикального ползунка:
Private Sub vertical_bar () 'Применяем серый фон для ячеек Cells.Interior.Color = RGB (240, 240, 240) 'Применяем задний фон и выбираем ячейку With Cells (ScrollBar_vertical.Value, ActiveCell.Column) .Interior.Color = RGB (255, 220, 100) 'Оранжевый .Select 'Выбираем ячейку End With End Sub Private Sub ScrollBar_vertical_Change() vertical_bar End Sub Private Sub ScrollBar_vertical_Scroll() vertical_bar End Sub
А тут код для горизонтального ползунка:
Private Sub horizontal_bar () 'Применяем серый фон для ячеек Cells.Interior.Color = RGB (240, 240, 240) 'Применяем задний фон и выбираем ячейку With Cells (ActiveCell.Row, ScrollBar_horizontal.Value) .Interior.Color = RGB (255, 220, 100) 'Оранжевый .Select 'Выбираем ячейку End With End Sub Private Sub ScrollBar_horizontal_Change() horizontal_bar End Sub Private Sub ScrollBar_horizontal_Scroll() horizontal_bar End Sub
Вы можете скачать Excel файл с примером: scrollbar.xls
Это начальная точка нашего следующего примера:
Вы можете скачать Excel файл с примером: userform4.xls
Когда форма запускается, мы хотим, чтобы 4 страны были загружены в выпадающий список (используя AddItem метод):
Private Sub UserForm_Initialize () For i = 1 To 4 '=> чтобы заполнить 4 страны ComboBox_Country.AddItem Cells (1, i) 'Добавляем значение ячеек от A1 до A4 используя цикл Next End Sub
Когда значение выпадающего списка меняется, мы хотим добавить города выбранной страны, используя цикл, подобен предыдущему.
Для того, чтобы сделать это, нам нужно номер колонки и номер строки.
Свойство ListIndex содержит порядковый номер выбранного элемента в выпадающем списке (в отличие от Value, которое содержит значение элемента списка). Заметьте, что ListIndex начинается с номера 0.
Номер колонки получается из:
column_number = ComboBox_Country.ListIndex + 1
Чтобы получить количество строк в выбранной колонке определенной страны, мы можем найти номер последней непустой ячейки:
rows_number = Cells(1, column_number).End(xlDown).Row
Используя эту информацию, теперь возможно создать цикл, чтобы добавить города в список:
Private Sub ComboBox_Country_Change () 'Очищаем список (в противном случае, города будут добавлены сразу) ListBox_Cities.Clear Dim column_number As Integer, rows_number As Integer 'Порядковый номер выбранного элемента (ListIndex начинается с 0): column_number = ComboBox_Country.ListIndex + 1 'Количество строк в выбранной колонке со странами: rows_number = Cells(1, column_number).End(xlDown).Row For i = 2 To rows_number '=> наполнение списка городами ListBox_Cities.AddItem Cells(i, column_number) Next End Sub
Примечание: Мы могли бы сократить код, но это бы сделало его менее читабельным:
Private Sub ComboBox_Country_Change() ListBox_Cities.Clear For i = 2 To Cells(1, ComboBox_Country.ListIndex + 1).End(xlDown).Row ListBox_Cities.AddItem Cells(i, ComboBox_Country.ListIndex + 1) Next End Sub
Город, который мы выберем, будет введен в текстовое поле:
Private Sub ListBox_Cities_Click() TextBox_Choice.Value = ListBox_Cities.Value End Sub
Здесь вы можете посмотреть пример в готовом Excel файле: userform4b.xls