VBA-Урок 12.3. Елементи управління (Controls)

Смуга прокрутки (ScrollBar)

Елементи управління також можуть використовуватись поза формами. В наступному прикладі ми використаємо елементи управління прямо на робочому аркуші.

Зазначте, що "Режим дизайнера" ("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

Випадаючий список та Вікно зі списком (ComboBox and ListBox)

Це є початкова точка нашого наступного прикладу:

Ви можете завантажити 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

Статті по темі:

  • VBA-Урок 12.2. Елементи управління (Controls)
  • VBA-Урок 12.4. Елементи управління (Вправи)