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. Элементы управления (Упражнения)