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

VBA Excel № 172. Использование ЭУ ListBox для выделения строк на листе

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

Использование элемента управления ListBox для выделения строк на листе

В данной статье рассмотрим, как использовать элемент управления ListBox для выделения строк на листе Excel. Пример, представленный ниже, предназначен для решения различных практических задач, связанных с выбором строк на активном листе с помощью ListBox. Он демонстрирует, как создать и настроить ListBox, чтобы отобразить элементы, соответствующие данным на листе, а также как управлять выделением этих элементов.

Описание работы с ListBox

В этом примере ListBox отображает строки, содержащиеся в определённом диапазоне активного листа Excel. Пользователь может выбрать несколько строк, используя флажки, а затем выделить соответствующие строки на листе. Это особенно полезно, когда необходимо выделить несколько несмежных диапазонов, так как предложенный метод значительно упрощает процесс по сравнению с использованием стандартного выделения с клавишей <Ctrl>. На скриншоте показано как ЭУ ListBox облегчает выделение строк на листе (числа, имена, даты, стоимость и т.п. взяты с потолка).

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

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

Данный файл был доступен раньше выхода статьи на моём телеграмм-канале.

Настройка элемента управления ListBox

Чтобы сделать возможным выбор нескольких элементов, свойству MultiSelect элемента управления ListBox присваивается значение 1 - fmMultiSelectMulti. Это позволяет пользователю выбирать сразу несколько элементов списка. Свойство ListStyle, равное 1 (fmListStyleOption), добавляет к каждому элементу флажки, что делает выбор более наглядным и удобным.

Ниже приводится разбор процедуры инициализации формы UserForm.

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

Что происходит в коде:

  1. Объявляются переменные для хранения количества столбцов, диапазона данных, ширины столбцов и для счётчика цикла.
  2. Переменная КоличествоСтолбцов получает значение, равное количеству столбцов в используемом диапазоне активного листа.
  3. Переменная Диапазон сохраняет весь используемый диапазон ячеек на активном листе.
  4. В блоке With настраиваются свойства элемента ListBox:
  • Устанавливается количество столбцов в ListBox.
  • Определяется диапазон данных для отображения в ListBox, исключая первую строку, которая может быть заголовком.
  • Формируется строка, содержащая ширину каждого столбца.
  • Ширина столбцов в ListBox устанавливается в соответствии с шириной столбцов на листе.
  • Начальный выбранный элемент в ListBox устанавливается на первый элемент.

Управление выбором элементов в ListBox

В примере реализованы две кнопки, которые позволяют пользователю быстро выделять все или отменять выделение всех элементов списка.

Процедура ниже устанавливает выделение для всех элементов ListBox. Каждый элемент в списке проходит проверку, и его свойство Selected устанавливается в True, что соответствует выделенному состоянию.

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

А в процедуре cmdNone_Click наоборот (см. скриншот ниже), выделение со всех элементов списка снимается путем установки свойства Selected в False.

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

Обработка события нажатия кнопки ОК

После того как пользователь выбрал нужные элементы в ListBox, кнопка ОК выполняет выделение соответствующих строк на листе.

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

В этой процедуре происходит следующее:

1. Объявляется переменная ВыбранныеСтроки для хранения выделенных строк.

2. Происходит проход по каждому элементу списка.

3. Если элемент выбран, он добавляется в диапазон ВыбранныеСтроки.

  • Если это первый выбранный элемент, он устанавливается как начальный диапазон.
  • Если уже есть выбранные строки, то текущий диапазон объединяется с новой строкой с помощью функции Union.

4. В конце процедуры, если были выделены строки, они становятся выделенными на листе Excel.

5. Форма закрывается.

Ниже приведены еще две процедуры. Первая закрывает форму при нажатии кнопки "Отмена" без выполнения каких-либо дополнительных действий, а вторая обновляет текст метки lblRowCol при изменении выделения в ListBox, показывая номер текущей выбранной строки. Это позволяет пользователю видеть, какую строку он выбрал.

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

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