Для работы с многоколоночными элементами управления 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 файлом-примером. Скачать его уже сейчас можно по этой ССЫЛКЕ