Найти в Дзене
VBA Excel с нуля

VBA Excel № 174. Фильтрация списка ListBox в поле TextBox

Когда список ListBox содержит значительное количество элементов, становится неудобно прокручивать его вручную, чтобы найти нужный элемент. Для упрощения задачи можно использовать фильтрацию списка, которая позволяет пользователю быстро находить нужные записи. На данном примере показан способ, как с помощью TextBox можно отфильтровать записи в ListBox, значительно облегчая поиск информации среди большого количества данных. Для демонстрации фильтрации элементов в ListBox используется специальная процедура, которая добавляет контакты в список. Эта процедура носит название FillContacts и принимает необязательный параметр sFilter, который отвечает за фильтрацию контактов. Если фильтр не задан, отображаются все имеющиеся записи. Если же фильтр установлен, то список отобразит только те контакты, которые соответствуют условиям фильтра. 1. Удаление существующих записей: Первым делом процедура очищает ListBox от всех существующих записей, чтобы после фильтрации там не оставалось ненужных элемен
Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Когда список ListBox содержит значительное количество элементов, становится неудобно прокручивать его вручную, чтобы найти нужный элемент. Для упрощения задачи можно использовать фильтрацию списка, которая позволяет пользователю быстро находить нужные записи. На данном примере показан способ, как с помощью TextBox можно отфильтровать записи в ListBox, значительно облегчая поиск информации среди большого количества данных.

Пример использования фильтрации в UserForm

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Работа программы выглядит так:

📌 Скачать файл пример, можно в конце статьи.

Для демонстрации фильтрации элементов в ListBox используется специальная процедура, которая добавляет контакты в список. Эта процедура носит название FillContacts и принимает необязательный параметр sFilter, который отвечает за фильтрацию контактов. Если фильтр не задан, отображаются все имеющиеся записи. Если же фильтр установлен, то список отобразит только те контакты, которые соответствуют условиям фильтра.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Давайте рассмотрим этот код подробнее.

1. Удаление существующих записей: Первым делом процедура очищает ListBox от всех существующих записей, чтобы после фильтрации там не оставалось ненужных элементов.

2. Циклический обход массива: Затем процедура проходит по каждой строке и каждому столбцу в массиве maContacts. Для этого используются вложенные циклы For. Внешний цикл отвечает за строки, внутренний — за столбцы.

3. Проверка соответствия фильтру: Сравнение каждого значения с фильтром происходит с помощью оператора Like. Этот оператор позволяет сравнивать строку с шаблоном, содержащим символы подстановки (*), что означает любую последовательность символов. Важно отметить, что фильтр делается нечувствительным к регистру с помощью функции UCase.

4. Добавление контакта в список: Если хотя бы одно значение контакта (например, имя, фамилия, email или отдел) соответствует фильтру, контакт добавляется в ListBox.

5. Выделение первого элемента: После добавления всех подходящих контактов, если список не пуст, процедура автоматически выделяет первый элемент.

Инициализация формы и заполнение списка

Для работы с массивом контактов используется событие UserForm_Initialize, которое инициализирует массив maContacts, загружая в него данные из таблицы на листе Excel. Затем вызывается процедура FillContacts, которая заполняет ListBox всеми контактами, так как фильтр по умолчанию отсутствует.

Скриншот с моего ноутбука
Скриншот с моего ноутбука
  1. Создание массива контактов: Вначале объявляется переменная maContacts, которая будет содержать все данные из таблицы tbl_Contacts.
  2. Заполнение массива данными: При инициализации формы данные из указанной таблицы загружаются в массив maContacts.
  3. Вызов процедуры FillContacts: После загрузки данных вызывается процедура FillContacts, которая заполняет ListBox контактами. Так как фильтр по умолчанию не задан, отобразятся все доступные контакты.

Фильтрация списка в режиме реального времени

Для реализации динамической фильтрации, где список обновляется по мере ввода текста в TextBox, используется обработчик события Change для TextBox. Каждый раз, когда пользователь вводит новый символ, вызывается процедура FillContacts с передачей введенного текста в качестве фильтра.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Этот код не так уж и сложен, но функционален: по мере изменения текста в TextBox, фильтрация выполняется очень быстро, позволяя пользователю видеть только те контакты, которые соответствуют введенному фильтру.

Завершение работы с формой

В дополнение к фильтрации, форма также содержит два элемента управления — кнопки ОК и Отмена. Их функции просты, но необходимы для завершения работы с формой.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

1. Обработка нажатия кнопки OK (cmdOK_Click): При нажатии на кнопку ОК происходит проверка, выбран ли какой-либо элемент из списка. Если элемент выбран, появляется сообщение с информацией о выбранном контакте. После этого форма закрывается.

2. Обработка нажатия кнопки Отмена (cmdCancel_Click): При нажатии на кнопку Отмена форма просто закрывается, не выполняя никаких дополнительных действий.

Пример демонстрирует, как можно достаточно несложно реализовать фильтрацию данных в ListBox с помощью TextBox. Использование процедуры FillContacts позволяет избегать дублирования кода и улучшает читаемость программы. Интересный момент заключается в том, что один и тот же код используется для обработки нескольких событий, что делает код более простым в сопровождении.

СКАЧАТЬ ФАЙЛ ПРИМЕР

АНОНС

✔На моём телеграмм-канале появился анонс на следующую статью «Применение элемента управления MultiPage», которая выйдет в четверг 12.09.2024 с НОВЫМ Excel ФАЙЛ-ПРИМЕРОМ. Скачать его уже сейчас можно уже сейчас по этой ССЫЛКЕ. Там же есть ВИДЕО о работе софта.