Динамический Выпадающий Список в Excel Vba • Модель запроса

ListBox или «окно со списком» – это один из элементов управления, который может быть расположен на форме для предоставления пользователю возможности выбора одного или нескольких элементов (пунктов) из предоставленного множества (списка) вариантов …

  • Через свойство RowSource (источник строк) в список загружается определенный диапазон (колонка ячеек). В этом случае добавление новых пунктов в список или удаление существующих из списка в процессе выполнения макросов VBA не возможно… (по крайней мере, до момента присвоения свойству RowSource значения пустой строки).
  • Через методы AddItem и RemoteItem (добавление или удаление пунктов списка)… Повторю, что для такой возможности, свойство RowSource должно иметь пустое значение.

Разместить на форме несколько радиокнопок, позволяющих загружать в элемент ListBox1 списки из разных колонок листа Excel.
Обеспечить возможность сортировки загруженных списков в ListBox1.
Обеспечить возможность множественного выбора элементов из списка и вывод результата выбора в окно сообщений MsgBox.

VBA Excel с помощью макросов ListBox Multiselect

Привязка к списку диапазона значений через свойство RowSource

Как видите, единственным параметром она получает номер колонки (правда, для простоты я оставил всего один лист в книге, а иначе бы лист тоже пришлось бы указать как параметр), а возвращает номер строки той ячейки, которую вернул метод Find…

Тогда обработчики событий щелчков мышью по радиокнопкам будут выглядеть так…

Можно было бы и еще упростить (до одной строки в процедуре),

но считаю, что наличие переменной lastrow помогает просматривать ее значение при отладке, а это сэкономленное время…. которое дороже, чем уменьшение объема кода…

В общем, первая радиокнопка помещает в список диапазон из колонки А (используя свойство RowSource), а вторая и третья, соответственно, из колонок В и С

Множественный выбор

Основное свойство элемента ListBox – это List… индексированный список значений… (As Variant) Поэтому к любому элементу списка можно обратиться по индексу… ,например List(idx)…
И так же важно второе индексированное свойство Selected(idx), которое представляет собой массив логических величин, показывающий, выделен ли конкретный элемент списка пользователем или нет…

Таким образом, обработчик кнопки «Сообщение» выглядит так…

For n = 0 To Me.ListBox1.ListCount — 1
If Me.ListBox1.Selected(n) Then
s = s & Me.ListBox1.List(n) & vbLf
End If
Next n

If s = «» Then
MsgBox «Нет выбранных пунктов», 0, «Выбранные пункты списка»
Else
MsgBox s, 0, «Выбранные пункты списка»
End If

Он формирует строку s , только из выделенных пунктов списка и выводит соответствующее сообщение… Встроенная константа vbLf означает переход на новую строку…

Сортировка списка

А вот для сортировки списка нам придется отказаться от свойства RowSource , т.к. изменение порядка элементов списка будет противоречить привязанному диапазону. VBA справедливо заругается…

Вот процедура сортировки объекта ListBox (который передается в виде параметра As Object)

Как видите, сначала создаем массив locList() нужной размерности и заполняем его элементами списка…
Затем отвязываем список от диапазона (aL.RowSource = «») и очищаем его (aL.Clear)
А полученный массив сортируем обычным образом (любым из алгоритмов сортировки).
Все. Осталось загрузить отсортированный массив в список, используя метод AddItem, конечно же, в цикле…

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

VBA Excel ListBox Multiselect» Привязка диапазона данных к ListBox; Добавление, удаление пунктов списка; Сортировка списка элемента ListBox.
Как видите, единственным параметром она получает номер колонки (правда, для простоты я оставил всего один лист в книге, а иначе бы лист тоже пришлось бы указать как параметр), а возвращает номер строки той ячейки, которую вернул метод Find…
Знайка, самый умный эксперт в Цветочном городе
Мнение эксперта
Знайка, самый умный эксперт в Цветочном городе
Если у вас есть вопросы, задавайте их мне!
Задать вопрос эксперту
Он формирует строку s , только из выделенных пунктов списка и выводит соответствующее сообщение Встроенная константа vbLf означает переход на новую строку. Если же вы хотите что-то уточнить, я с радостью помогу!
При вводе первых букв с клавиатуры высвечиваются подходящие элементы. И это далеко не все приятные моменты данного инструмента. Здесь можно настраивать визуальное представление информации, указывать в качестве источника сразу два столбца.
Значение прокрутки

Выбрать несколько значений из выпадающего списка excel

  • Через свойство RowSource (источник строк) в список загружается определенный диапазон (колонка ячеек). В этом случае добавление новых пунктов в список или удаление существующих из списка в процессе выполнения макросов VBA не возможно… (по крайней мере, до момента присвоения свойству RowSource значения пустой строки).
  • Через методы AddItem и RemoteItem (добавление или удаление пунктов списка)… Повторю, что для такой возможности, свойство RowSource должно иметь пустое значение.

Пользовательская форма будет иметь разные компоненты. Когда вы нажимаете на любой из компонентов, вам либо будут предоставлены инструкции о том, что и как должна быть предоставлена ​​информация, либо вам будут предоставлены варианты (варианты) для выбора. Все это обеспечивается с помощью элементов управления ActiveX в панели инструментов пользовательской формы.

Оставить отзыв

Публикуя свою персональную информацию в открытом доступе на нашем сайте вы, даете согласие на обработку персональных данных и самостоятельно несете ответственность за содержание высказываний, мнений и предоставляемых данных. Мы никак не используем, не продаем и не передаем ваши данные третьим лицам.