В этой статье будет продемонстрировано, как работать с выбранным элементом в поле списка в Excel VBA.
Окна списка широко используются в формах VBA, но также могут использоваться в вашем листе Excel. Они показывают пользователям список опций, один или несколько из которых пользователь может выбрать.
Создание списка в форме VBA
Чтобы создать список в форме VBA, нам сначала нужно создать UserForm.
После создания формы выберите элемент управления «Поле списка» на панели инструментов, а затем перетащите его, чтобы создать поле со списком в форме.
Добавление значений в список
В событии Initialize формы введите следующий код. Поле со списком подберет значения, которые хранятся в диапазоне ячеек на вашем листе Excel.
123456 | Частная подписка UserForm_Initialize ()Dim rng As RangeДля каждого диапазона в диапазоне ("A1: A50")Me.lstState.AddItem rng.ValueСледующий номерКонец подписки |
Когда мы запустим форму, появится список, как показано на изображении ниже:
Выбор значений из списка
По умолчанию одно значение может быть выбрано в списке в пользовательской форме. Однако это можно исправить, изменив свойство множественного выбора списка.
Щелкните поле списка, чтобы выбрать его, а затем в окне свойств измените свойство множественного выбора с 0-frmMultiSelectSingle к 1-frmMultiSelectMulti.
Теперь, когда мы запускаем форму, мы можем выбрать более одного варианта в списке.
Если мы изменим опцию на 2-frmMultiSelectExtended, это означает, что мы можем выбрать одно из значений, а затем, удерживая нажатой клавишу SHIFT, выберите другое значение ниже по списку, и все элементы между двумя выбранными значениями также будут выбраны.
Программирование на VBA | Генератор кода действительно работает для вас!
Работа с выбранными значениями в VBA
В зависимости от типа параметра, который мы использовали для свойства Multi-Select в окне списка, существует несколько способов использования значения или значений, выбранных в поле списка в коде VBA.
Присвоение значения переменной
Мы можем использовать After_Update событие списка, чтобы присвоить выбранное значение переменной.
Во-первых, давайте создадим переменную уровня модуля в верхней части модуля формы.
Под словами Вариант Явныйсоздайте следующую строковую переменную.
1 | Dim strState как String. |
После того, как мы создали эту переменную, мы можем дважды щелкнуть поле списка, чтобы перейти к коду, находящемуся за формой, или мы можем щелкнуть кнопку кода в редакторе VBE.
Событие щелчка в списке будет создано автоматически. Выберите After_Update Событие формирует список доступных процедур.
В событии After_Update введите следующий код:
123 | Частная подпрограмма lstState_AfterUpdate ()strState = Me.lstStateКонец подписки |
ПРИМЕЧАНИЕ. Вы можете удалить событие Click, так как это не требуется.
Теперь, если мы запустим форму и щелкнем по списку, выбранное значение будет сохранено в переменной. Чтобы проверить это, мы можем поставить точку BREAK в коде.
Теперь, когда мы запускаем форму, если мы щелкнем по списку, код перейдет в режим DEBUG и остановится в нашей точке останова. Если мы затем нажмем F8 на клавиатуре, чтобы перейти на следующий шаг в коде, переменная будет заполнена выбранным элементом в списке.
Мы можем просмотреть это значение, наведя указатель мыши на переменную.
ИЛИ
Мы можем просмотреть значение в окне «Немедленное».
Устали искать примеры кода VBA? Попробуйте AutoMacro!
Использование командной кнопки для возврата значения в Excel
Во-первых, мы создаем командную кнопку в форме, чтобы кнопка OK возвращала значение или значения, выбранные в поле списка, в Excel.
Выберите элемент управления Command Button, затем щелкните и перетащите в форму, чтобы создать кнопку.
В окне "Свойства" измените название кнопки на cmdOKи измените заголовок и ускоритель кнопки.
Назначение ускорителя состоит в том, чтобы пользователь использовал клавиатуру для активации кнопки, в данном случае Alt + O активирует кнопку.
Чтобы командная кнопка работала, нам нужно добавить за ней код, чтобы при нажатии кнопки запускался код. Это называется событием Click кнопки.
Чтобы перейти к событию щелчка, дважды щелкните кнопку в представлении дизайна формы. Событие щелчка будет создано автоматически, так как это событие чаще всего используется для командных кнопок.
Введите следующий код в событие щелчка командной кнопки.
123 | Частная подпрограмма cmdOK_Click ()Диапазон ("E1") = strStateКонец подписки |
Код подберет переменную, которую мы объявили в событии After_Update ListBox, и вернет значение в диапазон в Excel.
В качестве альтернативы мы можем выбрать значение непосредственно из списка, не используя переменную.
123 | Частная подпрограмма cmdOK_Click ()Диапазон ("E1") = me.lstStateКонец подписки |
Когда мы запускаем форму, выбранное значение будет возвращено в Excel, когда мы нажмем кнопку ОК.
Выбор нескольких значений
Если мы установили свойство множественного выбора в списке на 1 или 2, что позволяет нам выбирать несколько значений в списке, тогда код для выбора этих значений немного отличается.
В After_Update событие больше не запускается при выборе значений в списке - поэтому мы не можем использовать это событие.
Мы по-прежнему можем использовать событие нажатия кнопки команды, но нам нужно перебрать значения, выбранные в поле списка, чтобы вернуть их в Excel.
В событии щелчка командной кнопки введите следующий код.
12345678910 | Частная подпрограмма cmdOK_Click ()Dim x As IntegerДиапазон ("E1"). ВыберитеДля x = 0 To Me.lstState.ListCount - 1Если Me.lstState.Selected (x) = True, тоActiveCell = Me.lstState.List (x)ActiveCell.Offset (1, 0) .SelectКонец, еслиДалее xКонец подписки |
Теперь, когда мы запускаем форму, на лист Excel будут возвращены только выбранные значения.