Заполнение ListBox данными с помощью кода VBA Excel. Добавление значений в список методом AddItem, с помощью свойств List и RowSource. Примеры.
- Заполнение ListBox методом AddItem
- Заполнение ListBox с помощью свойства List
- Заполнение ListBox с помощью свойства RowSource
В примерах используется событие пользовательской формы UserForm_Initialize, реализуемое в модуле формы. Это очень удобно при тестировании, когда запуск формы или кода приводит к одному результату. Кроме того, из модуля формы обращаться к форме можно с помощью ключевого слова «Me».
Создайте в редакторе VBA Excel пользовательскую форму с любым именем и разместите на ней список с именем ListBox1. Вставляйте в модуль формы код примера, запускайте код или форму и смотрите результат.
Чтобы запустить форму, фокус должен быть на ее проекте или на одном из ее элементов управления. Чтобы запустить код, курсор должен быть в одной из его строк. Запускается код или форма нажатием клавиши «F5» или треугольной кнопки «Run Sub/UserForm»:
Заполнение ListBox методом AddItem
Метод AddItem используется для загрузки отдельного элемента в ListBox. Он создает в списке новую строку и записывает в нее значение. Используя цикл, можно загрузить в ListBox одномерный массив.
Пример 1
Загрузка элементов в ListBox по отдельности:
Private Sub UserForm_Initialize() With Me.ListBox1 .AddItem "Зима" .AddItem "Весна" .AddItem "Лето" .AddItem "Осень" End With End Sub
Результат работы кода:
Пример 2
Загрузка данных в ListBox из одномерного массива при помощи цикла VBA Excel:
Private Sub UserForm_Initialize() Dim myArray() As Variant, myElement As Variant myArray = Array("Зима", "Весна", "Лето", "Осень") With Me.ListBox1 For Each myElement In myArray .AddItem myElement Next End With End Sub
Заполнение ListBox с помощью свойства List
Свойство List позволяет в коде VBA Excel скопировать целиком одномерный или двухмерный массив значений в элемент управления ListBox. А также добавлять данные в элементы двухмерного списка по их индексам в строки, созданные методом AddItem.
Пример 3
Заполнение списка данными из одномерного массива.
Загрузка значений, возвращенных функцией Array:
Private Sub UserForm_Initialize() Me.ListBox1.List = Array("Зима", "Весна", "Лето", "Осень") End Sub
Загрузка значений из переменной одномерного массива:
Private Sub UserForm_Initialize() Dim myArray() As Variant myArray = Array("Январь", "Февраль", "Март", "Апрель", "Май") Me.ListBox1.List = myArray End Sub
Пример 4
Заполнение списка данными из двухмерного массива.
Private Sub UserForm_Initialize() 'Объявляем переменную массива 3×3 Dim myArray(2, 2) As Variant myArray(0, 0) = "Зима" myArray(0, 1) = "Январь" myArray(0, 2) = "Мороз" myArray(1, 0) = "Весна" myArray(1, 1) = "Апрель" myArray(1, 2) = "Теплеет" myArray(2, 0) = "Лето" myArray(2, 1) = "Июль" myArray(2, 2) = "Жара" With Me.ListBox1 'Указываем, что у нас 3 столбца .ColumnCount = 3 'Задаем ширину столбцов, если надо .ColumnWidths = "50;50;50" .List = myArray End With End Sub
Результат получается следующий:
Пример 5
Заполнение списка с тремя столбцами по каждому элементу отдельно. Создаем строку и записываем значение в первый столбец методом AddItem. Значения во второй и третий столбцы записываем с помощью свойства List по индексам:
Private Sub UserForm_Initialize() With Me.ListBox1 'Указываем, что у нас 3 столбца .ColumnCount = 3 'Задаем ширину столбцов, если надо .ColumnWidths = "50;50;50" .AddItem "Зима" .List(0, 1) = "Январь" .List(0, 2) = "Мороз" .AddItem "Весна" .List(1, 1) = "Апрель" .List(1, 2) = "Теплеет" .AddItem "Лето" .List(2, 1) = "Июль" .List(2, 2) = "Жара" End With End Sub
Результат работы кода будет таким же, как в Примере 4.
Заполнение ListBox с помощью свойства RowSource
Свойство RowSource позволяет загрузить в элемент управления ListBox значения из диапазона ячеек на рабочем листе Excel. Задать адрес диапазона свойству RowSource можно как в ходе выполнения кода VBA, так и в окне Properties элемента управления ListBox.
Адрес диапазона ячеек для свойства RowSource указывается по следующей формуле: "Имя_листа!Адрес_диапазона"
. Имя_листа соответствует имени листа по ярлыку. Адрес в окне Properties вводится без парных кавычек.
Если адрес диапазона указать без имени рабочего листа, то данные будут загружаться в список из соответствующего диапазона активного листа. Если имя рабочего листа содержит пробелы, то его следует заключить в одинарные кавычки: "'Данные для списка'!A1:A10"
.
Пример 6
Импорт данных в одностолбцовый список из диапазона «A1:A7» рабочего листа «Лист1»:
Private Sub UserForm_Initialize() Me.ListBox1.RowSource = "Лист1!A1:A7" End Sub
Пример 7
Импорт данных в четырехстолбцовый список с заголовками из диапазона «A2:D4» рабочего листа «Лист1» (заголовки импортируются автоматически из диапазона «A1:D1»):
Private Sub UserForm_Initialize() With Me.ListBox1 'Указываем, что у нас 4 столбца .ColumnCount = 4 'Задаем размеры столбцов .ColumnWidths = "50;50;50;50" 'Указываем, что нужна строка заголовков .ColumnHeads = True 'Импортируем данные .RowSource = "Лист1!A2:D4" End With End Sub
Другая информация об элементе управления ListBox представлена в отдельной статье.