Найти тему
VBA Excel с нуля

VBA Excel № 171.1 Работа с многоколоночными ЭУ ListBox

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

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

Основы работы с многоколоночным элементом управления ListBox

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

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

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

Настройка многоколоночного ListBox

Для того чтобы создать ListBox с несколькими столбцами и заполнить его данными из рабочей таблицы, необходимо выполнить следующие шаги:

Установка количества столбцов

Для начала ListBox с именем lbxProducts необходимо задать свойство ColumnCount элемента управления ListBox. Это свойство определяет количество столбцов, которое будет отображаться в ListBox. Например, если данные, которые необходимо отобразить, содержат три столбца, то значение свойства ColumnCount следует установить на 3.

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

Задание диапазона данных

После того как количество столбцов установлено, нужно указать диапазон данных (именованный диапазон который я назвал Products), который будет отображаться в ListBox. Для этого используется свойство RowSource.

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

Обратите внимание, что в данном примере диапазон включает несколько столбцов (с A по C), что соответствует количеству столбцов, установленному в ColumnCount.

Отображение заголовков столбцов

Если нужно отобразить заголовки столбцов, которые часто присутствуют в таблицах (например, "Имя", "Фамилия", "Возраст" или "Товар", "Наличие", "Код"), свойству ColumnHeads необходимо присвоить значение True. Тут есть нюанс и нужно помнить, что заголовки не включаются в сам диапазон данных, указанный в RowSource. Вместо этого VBA автоматически использует строку, которая находится непосредственно над первым элементом диапазона.

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

Например, если в диапазоне RowSource указано A2:C10 (или в моём случае именованный диапазон Products), заголовки будут взяты из ячеек A1:C1.

Настройка ширины столбцов

Зачастую возникает необходимость задать конкретную ширину для каждого столбца. Для этого используется свойство ColumnWidths, в котором значения ширины указываются в пунктах (1 пункт = 1/72 дюйма) и разделяются точками с запятой. Например, чтобы установить ширину трех столбцов соответственно в 70, 55 и 40 пунктов, следует записать:

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

Связывание столбца со значением элемента

Чтобы задать, какой из столбцов будет использоваться в качестве основного (связываемого) значения элемента ListBox, используется свойство BoundColumn. Это свойство указывает на тот столбец, значение которого будет возвращаться при обращении к свойству Value элемента управления. В данном примере связанным будет первый столбец.

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

Пример кода для работы с формой

Для вызова формы, содержащей ListBox, нужно создать простую процедуру в модуле.

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

После того как форма вызвана, код, который управляет действиями внутри формы, выглядит следующим образом (с пояснениями):

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

Подробности работы кода:

· Процедура ВызватьФорму: Эта процедура используется для открытия формы. Она активирует форму, на которой размещён ListBox.

· Событие cmdOK_Click: Данное событие срабатывает при нажатии на кнопку "OK" в форме. В этом случае форма закрывается командой Unload Me.

· Событие lbxProducts_Click: Это событие срабатывает при выборе элемента в ListBox. В коде проверяется, что выбран какой-то элемент списка (его индекс больше -1). Если элемент выбран, соответствующая строка на листе активируется (выделяется).

· Событие UserForm_Initialize: Это событие срабатывает при загрузке формы. Оно проверяет, находится ли активная ячейка на листе в диапазоне, указанном в свойстве RowSource элемента ListBox. Если да, то элемент списка, соответствующий этой ячейке, выделяется. Если нет — выделяется первый элемент списка.

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

✔ На моём телеграмм-канале появился анонс на следующую статью, которая выйдет 15.08.2024 с НОВЫМ Excel файлом-примером. Скачать его уже сейчас можно по этой ССЫЛКЕ

Наука
7 млн интересуются