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

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 представлена в отдельной статье.

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

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

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора. При добавлении в комментарий кода VBA Excel, вставьте перед его началом тег [vb] и по окончании кода - [/vb].