ListBox или «окно со списком» – это один из элементов управления, который может быть расположен на форме для предоставления пользователю возможности выбора одного или нескольких элементов (пунктов) из предоставленного множества (списка) вариантов …
- Через свойство RowSource (источник строк) в список загружается определенный диапазон (колонка ячеек). В этом случае добавление новых пунктов в список или удаление существующих из списка в процессе выполнения макросов VBA не возможно… (по крайней мере, до момента присвоения свойству RowSource значения пустой строки).
- Через методы AddItem и RemoteItem (добавление или удаление пунктов списка)… Повторю, что для такой возможности, свойство RowSource должно иметь пустое значение.
Разместить на форме несколько радиокнопок, позволяющих загружать в элемент ListBox1 списки из разных колонок листа Excel.
Обеспечить возможность сортировки загруженных списков в ListBox1.
Обеспечить возможность множественного выбора элементов из списка и вывод результата выбора в окно сообщений MsgBox.
Привязка к списку диапазона значений через свойство 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.
- щелчок мыши при нажатой клавише Shift позволяет выделить несколько подряд расположенных элементов;
- щелчок мыши при нажатой клавише Ctrl даёт возможность выделять группу несмежных элементов списка.
Редактор Visual Basic служит командным центром для работы в VBA. В нем вы должны находиться при разработке VBA-форм, создании VBA-кода, тестировании и отладке VBA программ. … В большинстве VBA-приложений можно воспользоваться одним из следующих методов. * Выбрать из меню Сервис=Макрос=Редактор Visual Basic.
[expert_bq id=»1570″]Техника написания процедуры события для любого объекта Excel в своей основе не имеет никаких принципиальных отличий по сравнению с техникой написания кода события для формы или элемента управления VBA. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq]
Хотя некоторые события Excel распознают лишь определенные объекты, большинство из них образует иерархию от объекта Worksheet до объектов Workbook и Application. Например, изменения, внесенные в рабочий лист, инициируют событие Change (Изменение) объекта Worksheet, который в свою очередь инициирует событие Sheet Change (Изменение листа) для объектов Workbook и Application.
Стиль значка
- Константы сообщения — позволяют определить вид диалогов.
- Заголовок – задает заголовок формы диалога.
- Файл справкиhlp — строковое выражение, указывающее имя файла справки для диалогового окна.
- Контекст справки — числовое выражение, указывающее номер контекста файла справки для диалогового окна.
Регистрация событий Службы часто выполняются, внешне ничем себя не проявляя, без диалогового взаимодействия с пользователем. Некоторые службы создают консоль, окно сообщений[34] или окно для взаимодействия с пользователем, но лучше всего записывать информацию о событиях
Константа | Описание | Значение |
vbCritical | Отображается значок Critical — Критичное сообщение, сообщение об ошибке. | 16 |
vbQuestion | Отображается значок Question — Сообщение с вопросом. | 32 |
vbExclamation | Отображается значок Exclamation — Предупреждающее сообщение. | 48 |
vbInformation | Отображается значок Information — Информационное сообщение. | 64 |
Как открыть Visual Basic в Visual Studio?
В меню Сервис в Word или Excel укажите пункт макрос, а затем выберите пункт Безопасность. В диалоговом окне Безопасность перейдите на вкладку Доверенные издатели . Выберите для включения или снимите флажок, чтобы отключить, Доверять доступ к Visual Basic проекту. Нажмите кнопку OK.