Найти в Дзене
Black_Fox

ComboBox ActiveX в MS Excel. Как сделать вложенный или многоуровневый выпадающий список.

Приветствую. Сутью статьи будет написание кода VBA для элемента ComboBox и его заполнение данными для создания выпадающего меню с несколькими списками. 1. Для начала нам нужно создать файл с расширением .xlsm 2. Далее открываем файл. В верхнюю панель нам нужно добавить меню разработчика. Если у вас оно есть, можете пропустить этот пункт. Проходим по пути:
Файл -> Параметры -> Настроить ленту -> Правая вкладка -> Разработчик
Все как на скриншоте ниже. 3. В верхней панели появляется меню разработчика. Выбираем:
Вставить -> Элементы ActiveX -> Поле со списком (элемент ActiveX) Выделяем область в которой нам нужно разместить ComboBox1. Далее в режиме конструктора мы нажимаем правой кнопкой по нашему элементу и выбираем "Свойства". Нам важно заполнить поле ListFillRange (список данных, которыми будет заполняться ComboBox1). Теперь для реализации связанного выпадающего списка нам понадобится второй ComboBox2 и два массива данных под каждый из списков. Далее нажимаем "Просмотр кода" и слева

Приветствую. Сутью статьи будет написание кода VBA для элемента ComboBox и его заполнение данными для создания выпадающего меню с несколькими списками.

1. Для начала нам нужно создать файл с расширением .xlsm

-2

2. Далее открываем файл. В верхнюю панель нам нужно добавить меню разработчика. Если у вас оно есть, можете пропустить этот пункт.

Проходим по пути:
Файл -> Параметры -> Настроить ленту -> Правая вкладка -> Разработчик
Все как на скриншоте ниже.

-3

3. В верхней панели появляется меню разработчика. Выбираем:
Вставить -> Элементы ActiveX -> Поле со списком (элемент ActiveX)

-4

Выделяем область в которой нам нужно разместить ComboBox1. Далее в режиме конструктора мы нажимаем правой кнопкой по нашему элементу и выбираем "Свойства". Нам важно заполнить поле ListFillRange (список данных, которыми будет заполняться ComboBox1).

-5

Теперь для реализации связанного выпадающего списка нам понадобится второй ComboBox2 и два массива данных под каждый из списков.

-6

Далее нажимаем "Просмотр кода" и слева выбираем Лист1, где находятся наши элементы. Появится такое окно.

Поле для VBA кода
Поле для VBA кода

Вписываем туда код.

Private Sub ComboBox1_Change()
ComboBox2.Clear
Select Case ComboBox1.Value
Case "Список 1"
FillComboBox ComboBox2, Range("C2:C6")
Case "Список 2"
FillComboBox ComboBox2, Range("E2:E6")
End Select
End Sub
Private Sub FillComboBox(cmb As ComboBox, rng As Range)
Dim cell As Range
For Each cell In rng
cmb.AddItem cell.Value
Next cell
End Sub

Мы создаем две функции ComboBox1_Change() и FillComboBox(). При срабатывании сигнала Change() в зависимости от данных в ComboBox1 заполняется ComboBox2. За заполнение отвечает функция FillComboBox. В ней по циклу заполняются данные из переданного радиуса, где Range("C2:C6") - ваш диапазон ячеек.

Итоговой код выглядит так.

Полный код
Полный код

Результатом является изменяющийся ComboBox2 в зависимости от данных в ComboBox1.

При выборе "Список 1"
При выборе "Список 1"
При выборе "Список 2"
При выборе "Список 2"