Перейти к содержимому

VBA Excel. ListBox – заполнение списка данными

Заполнение ListBox данными с помощью кода VBA Excel. Добавление значений в список методом AddItem, с помощью свойств List и RowSource. Примеры.

  1. Заполнение ListBox методом AddItem
  2. Заполнение ListBox с помощью свойства List
  3. Заполнение ListBox с помощью свойства RowSource

В примерах используется событие пользовательской формы UserForm_Initialize, реализуемое в модуле формы. Это очень удобно при тестировании, когда запуск формы или кода приводит к одному результату. Кроме того, из модуля формы обращаться к форме можно с помощью ключевого слова «Me».

Создайте в редакторе VBA Excel пользовательскую форму с любым именем и разместите на ней список с именем ListBox1. Вставляйте в модуль формы код примера, запускайте код или форму и смотрите результат.

Чтобы запустить форму, фокус должен быть на ее проекте или на одном из ее элементов управления. Чтобы запустить код, курсор должен быть в одной из его строк. Запускается код или форма нажатием клавиши «F5» или треугольной кнопки «Run Sub/UserForm»:

Кнопка «Run Sub/UserForm» в редакторе VBA

Заполнение ListBox методом AddItem

Метод AddItem используется для загрузки отдельного элемента в ListBox. Он создает в списке новую строку и записывает в нее значение. Используя цикл, можно загрузить в ListBox одномерный массив.

Пример 1
Загрузка элементов в ListBox по отдельности:

Private Sub UserForm_Initialize()
  With Me.ListBox1
    .AddItem "Зима"
    .AddItem "Весна"
    .AddItem "Лето"
    .AddItem "Осень"
  End With
End Sub

Результат работы кода:

Элемент управления ListBox на пользовательской форме

Пример 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

Результат получается следующий:

ListBox с тремя столбцами

Пример 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.

Окно Properties-ListBox

Адрес диапазона ячеек для свойства RowSource указывается по следующей формуле: "Имя_листа!Адрес_диапазона". Имя_листа соответствует имени листа по ярлыку. Адрес в окне Properties вводится без парных кавычек.

Если адрес диапазона указать без имени рабочего листа, то данные будут загружаться в список из соответствующего диапазона активного листа. Если имя рабочего листа содержит пробелы, то его следует заключить в одинарные кавычки: "'Данные для списка'!A1:A10".

Пример 6
Импорт данных в одностолбцовый список из диапазона «A1:A7» рабочего листа «Лист1»:

Private Sub UserForm_Initialize()
  Me.ListBox1.RowSource = "Лист1!A1:A7"
End Sub

ListBox с одним столбцом

Пример 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 с четырьмя столбцами

Другая информация об элементе управления ListBox представлена в отдельной статье.

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора.