Vba excel listbox несколько столбцов

Обновлено: 05.07.2024

Свойство Column можно использовать для ссылки на определенную комбинацию столбцов или столбцов и строк в окне комбо или списке с несколькими столбцами. Только для чтения, Variant.

Синтаксис

выражения. Столбец (Индекс, Строка)

выражение Переменная, представляющие объект ListBox.

Параметры

Имя Обязательный или необязательный Тип данных Описание
Index Обязательный Long Длинный набор, который может варьироваться от 0 до параметра свойства ColumnCount минус один.
Row Необязательный Variant Набор, который может варьироваться от 0 до параметра свойства ListCount минус 1.

Примечания

Используйте 0 для ссылки на первый столбец, 1 для ссылки на второй столбец и так далее. Используйте 0 для ссылки на первую строку, 1 для ссылки на вторую строку и так далее. Например, в поле списка, содержащего столбец имен клиентов и столбец имен клиентов, можно ссылаться на имя клиента во втором столбце и пятом ряду в качестве:

Свойство Column можно назначить содержимое комбо-окна или списка другому контролю, например текстовому. Например, чтобы установить свойство ControlSource текстового окна к значению во втором столбце списка, можно использовать следующее выражение.

Если пользователь не сделал выбора при ссылке на столбец в поле комбо или поле списка, параметр свойства Column будет Null. Вы можете использовать функцию IsNull, чтобы определить, был ли сделан выбор, как в следующем примере.

Чтобы определить, сколько столбцов имеется в поле комбо или поле списка, можно проверить параметр свойства ColumnCount.

Пример

В следующем примере свойство Column и свойство ColumnCount используют для печати значений выбора полей списка.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Ранее я рассмотрел методы создания пользовательских форм и основы работы с ними (если вы никогда не работали с пользовательскими формами, рекомендую для начала прочитать указанную заметку). Далее привел целый ряд практически полезных примеров пользовательских диалоговых окон. В настоящей заметке подробнее рассказывается об использовании элемента управления ListBox.[1]


Рис. 1. Установка свойства RowSource на этапе разработки

Элемент управления ListBox довольно гибкий в использовании, но работа с ним может оказаться достаточно сложной. В большинстве случаев методы, описанные здесь, могут применяться и для работы с элементом управления ComboBox.

При работе с элементом управления ListBox следует учитывать, что:

  • Опции списка элемента управления ListBox могут извлекаться из диапазона ячеек (определяемого свойством RowSource) или добавляться с помощью VBA (для этого используется метод Addltem).
  • Элемент управления ListBox может быть применен для выделения одной или нескольких опций. Соответствующее поведение определяется значением свойства MultiSelect.
  • Если элемент управления ListBox не настроен на выделение нескольких опций, то значение элемента управления ListBox может связываться с ячейкой листа с помощью свойства ControlSource.
  • Элемент управления ListBox может отображаться без предварительно выбранной опции (для этого необходимо установить свойство Listlndex равным –1). Но как только пользователь выделит одну из опций списка, отменить выделение будет невозможно. Исключение из этого правила— значение свойства MultiSelect равно True.
  • Элемент управления ListBox может содержать несколько столбцов (что указывается в свойстве ColumnCount) и даже описательные заголовки (для этого используется свойство ColumnHeads).
  • Вертикальный размер элемента управления ListBox, помещенного в пользовательское диалоговое окно, не всегда совпадает с вертикальным размером объекта UserForm на экране.
  • Опции списка элемента управления ListBox могут отображаться в виде флажков, если разрешено выделение нескольких элементов, или в виде переключателей, если поддерживается только единичное выделение. Это поведение определяется значением свойства ListStyle.

Добавление опций в элемент управления ListBox

Перед отображением пользовательского диалогового окна, которое содержит элемент управления ListBox, следует заполнить элемент управления ListBox необходимыми опциями. Элемент управления ListBox заполняется на этапе разработки проекта посредством указания диапазона ячеек, которые содержат необходимые данные. Его также можно заполнить на этапе выполнения, воспользовавшись кодом VBA для добавления всех опций списка.

В двух примерах этого раздела предполагается следующее:

  • используется диалоговое окно UserForm с именем UserForm1;
  • диалоговое окно UserForm1 содержит элемент управления ListBox, который называется ListBox1;
  • рабочая книга содержит лист Лист1, в диапазоне А1:А12 которого определены опции, отображаемые в элементе управления ListBox.

Добавление опций в элемент управления ListBox на этапе разработки

Для добавления опций в элемент управления ListBox на этапе разработки необходимо, чтобы они хранились в диапазоне ячеек рабочей книги. Воспользуйтесь свойством RowSource для указания диапазона, который содержит опции элемента управления ListBox. На рис. 1 показано окно Properties для элемента управления ListBox (см. также файл listbox fill.xlsm) Свойство RowSource установлено равным Лист1!А1: А12. Когда диалоговое окно UserForm отображается на экране, элемент управления ListBox содержит двенадцать опций из этого диапазона. Опции добавляются в элемент управления ListBox на этапе разработки, сразу после того, как диапазон определяется в качестве значения свойства RowSource.

Удостоверьтесь, что в значении свойства RowSource присутствует имя листа. В противном случае элемент управления ListBox будет применять указанный диапазон в активном рабочем листе. Иногда следует идентифицировать диапазон максимально точно, указав даже имя рабочей книги. Лучше всего сначала определить имя для диапазона, а затем включить его в состав разработанного кода. Это гарантирует использование требуемого диапазона, даже если были добавлены или удалены строки, не входящие в диапазон.

Добавление опций в элемент управления ListBox на этапе выполнения

Чтобы добавить опции элемента управления ListBox на этапе выполнения, необходимо:

  • с помощью кода определить значение свойства RowSource, чтобы указать диапазон, хранящий необходимые данные;
  • создать код, использующий метод Addltem для добавления опций в элемент управления ListBox.

Следующая процедура устанавливает значения свойства RowSource элемента управления ListBox перед тем, как отображается диалоговое окно UserForm. В этом случае опции состоят из значений в ячейках диапазона Categories рабочего листа Budget:

UserForml.ListBoxl.RowSource = " Budget!Categories "
UserForml.Show

Если опции элемента управления ListBox не содержатся в диапазоне ячеек листа, то можно создать специальный код VBA для заполнения элемента управления ListBox перед кодом отображения диалогового окна. Следующая процедура заполняет окно списка элемента управления ListBox названиями месяцев года с помощью метода Addltem:

Добавляет новый элемент в список значений, отображаемого в указанном элементе управления полем списка.

Синтаксис

выражения. AddItem (Item, Index)

выражение Переменная, представляющие объект ListBox.

Параметры

Имя Обязательный или необязательный Тип данных Описание
Элемент Обязательный String Текст отображения для нового элемента.
Index Необязательный Variant Положение элемента в списке. Если этот аргумент опущен, элемент добавляется в конец списка.

Примечания

Свойство RowSourceType указанного управления должно быть задано в списке значений.

Этот метод действителен только для элементов управления полем списка или комбо-полем в формах.

Номера элементов списка начинаются с нуля. Если значение аргумента Item не соответствует существующему номеру элемента, возникает ошибка.

Для списков с несколькими столбцами используйте полуколоны, чтобы разграничить строки для каждого столбца (например, "1010;red;large" для списка из трех столбцов). Если аргумент Item содержит меньше строк, чем столбцы в элементе управления, элементы будут добавлены начиная с левого столбца. Если аргумент Item содержит больше строк, чем столбцов в элементе управления, дополнительные строки игнорируются.

Чтобы удалить элементы из списка значений, используйте метод RemoveItem.

Пример

В этом примере элемент добавляется в конец списка в элемент управления полем списка. Для работы функции необходимо передать ему объект ListBox, представляющий элемент управления полем списка в форме и строковое значение, представляющее текст добавленного элемента.

В этом примере элемент добавляется в начало списка в элементе управления полем комбо. Для работы функции необходимо передать объект ComboBox, представляющий элемент управления коробкой комбо на форме и строковое значение, представляющее текст добавленного элемента.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

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

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

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

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

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

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

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

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

Пример 2
Загрузка данных в ListBox из одномерного массива при помощи цикла VBA Excel:

Заполнение ListBox с помощью свойства List

Свойство List позволяет в коде VBA Excel скопировать целиком одномерный или двухмерный массив значений в элемент управления ListBox. А также добавлять данные в элементы двухмерного списка по их индексам в строки, созданные методом AddItem.

Пример 3
Заполнение списка данными из одномерного массива.

Загрузка значений, возвращенных функцией Array:

Me . ListBox1 . List = Array ( "Зима" , "Весна" , "Лето" , "Осень" )

Загрузка значений из переменной одномерного массива:

myArray = Array ( "Январь" , "Февраль" , "Март" , "Апрель" , "Май" )

Пример 4
Заполнение списка данными из двухмерного массива.

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

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

Пример 5
Заполнение списка с тремя столбцами по каждому элементу отдельно. Создаем строку и записываем значение в первый столбец методом AddItem. Значения во второй и третий столбцы записываем с помощью свойства List по индексам:

Результат работы кода будет таким же, как в Примере 4.

Заполнение ListBox с помощью свойства RowSource

Свойство RowSource позволяет загрузить в элемент управления ListBox значения из диапазона ячеек на рабочем листе Excel. Задать адрес диапазона свойству RowSource можно как в ходе выполнения кода VBA, так и в окне Properties элемента управления ListBox.

Окно Properties-ListBox

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

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

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

Читайте также: