Во второй части статьи (начало в статье № 171.1) мы продолжим изучение работы с многоколоночными элементами управления ListBox в Excel и разберем, как заполнить ListBox данными из нескольких столбцов без использования диапазона ячеек на листе. Для этого используется двумерный массив, который позволяет гибко управлять данными и обеспечивает возможность их динамического изменения прямо в коде.
Использование двумерного массива для заполнения ListBox
Когда требуется отобразить данные в нескольких столбцах, но использование диапазона ячеек неудобно, можно использовать двумерный массив. Такой массив может содержать несколько строк и столбцов, и после его заполнения он может быть напрямую присвоен свойству List элемента ListBox.
Пример использования двумерного массива
Давайте рассмотрим пример, где необходимо создать ListBox, отображающий названия месяцев в одном столбце и количество дней в каждом месяце — в другом. Для этого сначала создается и заполняется двумерный массив, а затем этот массив передается в ListBox.
📌 Скачать файл пример, можно в конце статьи.
Вызов формы с ListBox
Для начала создадим процедуру, которая будет вызывать форму с нашим ListBox. Эта процедура аналогична той, что была в первой части статьи № 171.1.
Основной код для работы с ListBox
Теперь перейдем к коду, который выполняется при инициализации формы. В этом коде мы создаем и заполняем двумерный массив Data, а затем передаем его в ListBox.
Некоторые подробности работы кода:
1. Инициализация массива:
Вначале создается двумерный массив Data, который имеет размер 12x2. Этот массив будет содержать информацию о каждом месяце года — название месяца и количество дней в нём.
2. Заполнение массива:
Затем выполняется цикл, который заполняет массив данными. В первом столбце массива (Data(i, 1)) сохраняется название месяца, а во втором (Data(i, 2)) — количество дней в этом месяце.
3. Настройка ListBox:
После того как массив заполнен, необходимо установить количество столбцов в ListBox, чтобы они соответствовали структуре данных в массиве, и передать массив в свойство List элемента управления ListBox.
Me.ListBox1.ColumnCount = 2 ' Устанавливаем количество столбцов
Me.ListBox1.List = Data ' Присваиваем массив ListBox
Ограничения метода
Есть одна заковырка! Если данные в ListBox загружены из массива VBA, то создать заголовки столбцов с использованием свойства ColumnHeads невозможно. Это ограничение VBA, с которым видимо придется смириться (или что-то придумать).