ComboBox позволяет пользователю выбирать значение из предварительно определенного списка. Этот список может быть статическим или динамическим, формируемым на основе данных в таблице.
Сегодня подробно рассмотрим: как использовать данный элемент управления на пользовательской форме, как его заполнить и как установить связь между ComboBox и TextBox.
📢 Скачать исходник с примером кода вы можете в конце статьи 🔽
▶️ Элемент управления ComboBox
➡️ Ключевые аспекты элемента управления ComboBox:
- Редактирование и выбор: По умолчанию пользователь может выбирать значения только из списка. Однако, в зависимости от настроек можно позволить пользователю вводить свои значения.
- События: ComboBox генерирует различные события, такие как Change, когда выбор пользователя меняется, или DropDown, когда выпадающий список открывается, например:
- Зависимость от данных: ComboBox может быть связан с данными в таблице. Это позволяет автоматически обновлять список в ComboBox при изменении исходных данных, что улучшает удобство использования и минимизирует возможные ошибки.
- Стили и форматирование: Вы можете настраивать внешний вид ComboBox, включая цвета, шрифты и границы, чтобы он соответствовал общему стилю пользовательского интерфейса:
- Привязка к макросам: ComboBox может быть связан с макросами, что позволяет автоматизировать дополнительные действия при выборе конкретного значения, учесть возможные ошибки и предоставить соответствующее информационное сообщение пользователю.
▶️ Исходные данные
Для целей данного примера будем рассматривать данные предыдущего обзора:
🔷 Задача: создать на пользовательской форме выпадающий список используя элемент управления ComboBox и отобразить сведения о студентах на основе определенного в ComboBox критерия.
Для отображения информации создадим пользовательскую форму с элементами управления ComboBox и TextBox:
Вызов макроса будем задавать на "кнопку" размещенную на листе:
Чтобы решение было универсальным определим именованный диапазон для данных выпадающего списка:
▶️ Макрос для вызова формы
Для отображения созданной формы применим уже знакомый макрос:
Теперь, при клике по кнопке будет отображена форма:
▶️ Способы заполнения ComboBox
Чтобы заполнить ComboBox можно использовать любой из представленных ниже способов
🔘 Способ 1. Метод AddItem
В данном случае непосредственно в коде с помощью метода AddItem указываются два предопределенных элемента "сдано" и "не сдано", которые в дальнейшем добавляются в выпадающий список.
🔘 Способ 2. Массив, создаваемый с помощью функции Array
Аналогично предыдущему способу можно задать предопределенные элементы выпадающего списка используя массив и функцию Array:
🔘 Способ 3. Использование свойства RowSource
Данный способ является более универсальным т.к. позволяет сформировать динамический выпадающий список:
Путем установки свойства RowSource на значение "критерий", список ComboBox будет заполнен данными, соответствующими указанному "критерию".
При добавлении нового критерия в список, он также будет отражен в выпадающем списке:
🔘 Способ 4. Использование цикла For Each (уникальный список значений)
Данный подход позволяет "перебирать" ячейки в диапазоне и добавлять их значения в список ComboBox, предотвращая при этом дубликаты.
Это позволит сформировать выпадающий список из уникальных значений используя непосредственно источник данных:
🔔 Обратите внимание! в данном примере применено событие UserForm_Activate. О том, в чем разница мы объясняли в предыдущем обзоре.
📝 Тестируем результат
Какой бы из рассмотренных способов вы бы ни выбрали, теперь у элемента управления ComboBox будет выпадающий список:
▶️ Способы заполнения TextBox
Завершающим этапом решения задачи является связь ComboBox и TextBox таким образом, чтобы при выборе критерия поиска нужная информация отображалась в TextBox.
Для реагирования на действия пользователя при выборе критерия будем использовать событие "Change":
Теперь при выборе критерия TextBox будет заполнен соответствующим списком значений:
▶️ Дополнительно
Как обсуждалось ранее, заполнять TextBox можно не только списком значений, но отображать в нем результаты поиска.
Чтобы продемонстрировать данный пример изменим форму следующим образом:
Теперь в качестве критерия используется значение столбца "Студент".
Для отображения выпадающего списка зададим следующий макрос:
* В данном случае предполагается что источник не содержит повторяющихся значений
Для того, чтобы отобразить в набранный балл и результат в соответствующих TextBox аналогично рассмотренному выше примеру будем использовать событие "Change":
Макрос реализует автоматическое отображение значений из столбцов C и D в TextBox1 и TextBox2 на пользовательской форме при изменении выбранного значения в выпадающем списке ComboBox1.
Событие ComboBox1_Change запускается при изменении выбора в выпадающем списке. После чего, согласно выбранному значению в столбце B находим соответствующие значения в столбцах C и D и отображаем их в соответствующих текстовых полях (TextBox1 и TextBox2).
Если соответствующие значения не найдены, текстовые поля очищаются.
📝 Тестируем результат:
Теперь достаточно выбрать из выпадающего списка "нужного Студента", чтобы на форме отобразился результат:
При наличии нескольких критериев поиска можно добавить на форму несколько ComboBox и связать их между собой аналогично зависимым выпадающим спискам.
Но, о том, как реализовать данный подход мы рассмотрим в следующих обзорах 😊. Оставайтесь на связи! 💕
📍 Рекомендуемые статьи 🔽