Использование элемента управления ListBox для выделения строк на листе
В данной статье рассмотрим, как использовать элемент управления ListBox для выделения строк на листе Excel. Пример, представленный ниже, предназначен для решения различных практических задач, связанных с выбором строк на активном листе с помощью ListBox. Он демонстрирует, как создать и настроить ListBox, чтобы отобразить элементы, соответствующие данным на листе, а также как управлять выделением этих элементов.
Описание работы с ListBox
В этом примере ListBox отображает строки, содержащиеся в определённом диапазоне активного листа Excel. Пользователь может выбрать несколько строк, используя флажки, а затем выделить соответствующие строки на листе. Это особенно полезно, когда необходимо выделить несколько несмежных диапазонов, так как предложенный метод значительно упрощает процесс по сравнению с использованием стандартного выделения с клавишей <Ctrl>. На скриншоте показано как ЭУ ListBox облегчает выделение строк на листе (числа, имена, даты, стоимость и т.п. взяты с потолка).
📌 Скачать файл пример, можно в конце статьи.
Данный файл был доступен раньше выхода статьи на моём телеграмм-канале.
Настройка элемента управления ListBox
Чтобы сделать возможным выбор нескольких элементов, свойству MultiSelect элемента управления ListBox присваивается значение 1 - fmMultiSelectMulti. Это позволяет пользователю выбирать сразу несколько элементов списка. Свойство ListStyle, равное 1 (fmListStyleOption), добавляет к каждому элементу флажки, что делает выбор более наглядным и удобным.
Ниже приводится разбор процедуры инициализации формы UserForm.
Что происходит в коде:
- Объявляются переменные для хранения количества столбцов, диапазона данных, ширины столбцов и для счётчика цикла.
- Переменная КоличествоСтолбцов получает значение, равное количеству столбцов в используемом диапазоне активного листа.
- Переменная Диапазон сохраняет весь используемый диапазон ячеек на активном листе.
- В блоке With настраиваются свойства элемента ListBox:
- Устанавливается количество столбцов в ListBox.
- Определяется диапазон данных для отображения в ListBox, исключая первую строку, которая может быть заголовком.
- Формируется строка, содержащая ширину каждого столбца.
- Ширина столбцов в ListBox устанавливается в соответствии с шириной столбцов на листе.
- Начальный выбранный элемент в ListBox устанавливается на первый элемент.
Управление выбором элементов в ListBox
В примере реализованы две кнопки, которые позволяют пользователю быстро выделять все или отменять выделение всех элементов списка.
Процедура ниже устанавливает выделение для всех элементов ListBox. Каждый элемент в списке проходит проверку, и его свойство Selected устанавливается в True, что соответствует выделенному состоянию.
А в процедуре cmdNone_Click наоборот (см. скриншот ниже), выделение со всех элементов списка снимается путем установки свойства Selected в False.
Обработка события нажатия кнопки ОК
После того как пользователь выбрал нужные элементы в ListBox, кнопка ОК выполняет выделение соответствующих строк на листе.
В этой процедуре происходит следующее:
1. Объявляется переменная ВыбранныеСтроки для хранения выделенных строк.
2. Происходит проход по каждому элементу списка.
3. Если элемент выбран, он добавляется в диапазон ВыбранныеСтроки.
- Если это первый выбранный элемент, он устанавливается как начальный диапазон.
- Если уже есть выбранные строки, то текущий диапазон объединяется с новой строкой с помощью функции Union.
4. В конце процедуры, если были выделены строки, они становятся выделенными на листе Excel.
5. Форма закрывается.
Ниже приведены еще две процедуры. Первая закрывает форму при нажатии кнопки "Отмена" без выполнения каких-либо дополнительных действий, а вторая обновляет текст метки lblRowCol при изменении выделения в ListBox, показывая номер текущей выбранной строки. Это позволяет пользователю видеть, какую строку он выбрал.