Свойство MultiSelect в Excel VBA позволяет пользователю выбрать несколько элементов в списке. UserForm мы собираемся создать выглядит следующим образом:

Multiple List Box Selections in Excel VBA

Для создания этого UserForm, выполните следующие действия.

  1. Откройте редактор Visual Basic. Если проводник проекта не отображается, нажмите кнопку Просмотр, Project Explorer.

  2. Нажмите кнопку Вставить, UserForm. Если панель инструментов не появляется автоматически, нажмите кнопку View, Toolbox. Экран должен быть установлен, как показано ниже.

Userform Screen Setup in Excel VBA

  1. Добавьте окно списка (первый слева, второй справа), командные кнопки, флажки (первый слева, вторые справа), рамы и опционные кнопки (первый в верхнем, второй ниже первый, и так далее). После того, как это было закончено, результат должен быть согласован с изображением UserForm, показанным ранее. Например, создать элемент управления окна списка, нажав на ListBox из панели инструментов. Далее, вы можете перетащить окно списка на UserForm. Когда вы приедете в раме «Выберите тип», не забудьте сделать этот кадр первым, прежде чем разместить три дополнительные кнопки в нем.

  2. Вы можете изменить имена и подписи элементов управления. Имена используются в коде Excel VBA. Титры являются те, которые появляются на экране. Это хорошая практика, чтобы изменить имена элементов управления, но не надо здесь, потому что у нас есть только несколько элементов управления в этом примере. Чтобы изменить заголовок пользовательской формы, командные кнопки, флажки, каркасные и опционные кнопки, выберите View, Properties Window и нажмите на каждый элементе управления.

  3. Для того, чтобы показать UserForm, поместить командную кнопку на листе и добавьте следующие строки кода:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Сейчас мы собираемся создать Sub UserForm_Initialize. При использовании метода Show для UserForm, этот подпункт будет автоматически выполняться.

  1. Откройте редактор Visual Basic.

  2. В окне Project Explorer, щелкните правой кнопкой мыши на UserForm1, а затем нажмите кнопку Просмотр кода.

  3. Во-первых, объявить переменную I типа Integer. Объявите переменную в разделе Общие объявления (в верхней части кода). Таким образом, у вас есть только объявить переменную один раз, и вы можете использовать их в нескольких сабвуферов.

Dim i As Integer
  1. Выберите UserForm из списка левого выпадающего списка. Выберите Initialize справа в раскрывающемся списке.

  2. Добавьте следующие строки кода:

Private Sub UserForm_Initialize()

With ListBox1

.AddItem "Sales"

.AddItem "Production"

.AddItem "Logistics"

.AddItem "Human Resources"

End With

OptionButton3.Value = True

End Sub

Объяснение: первый список коробка будет заполнена и кнопка третьего параметра установлена ​​по умолчанию.

Теперь мы создали первую часть UserForm. Хотя это выглядит аккуратным уже ничего не случится еще когда мы нажмем кнопку команд или другие элементы управления.

  1. В окне проекта дважды щелкните на UserForm1.

  2. Дважды щелкните на кнопке Add.

  3. Добавьте следующие строки кода:

Private Sub CommandButton1_Click()

For i = 0 To ListBox1.ListCount - 1

If ListBox1.Selected(i) = True Then ListBox2.AddItem ListBox1.List(i)

Next i

End Sub

Объяснение: петли Excel VBA через первый список (индекс списка число ноля (0) для первого элемента в списке), и, если выбран, добавляет элемент в второй список.

  1. Дважды щелкните на кнопке Удалить.

  2. Добавьте следующие строки кода:

Private Sub CommandButton2_Click()

Dim counter As Integer

counter = 0

For i = 0 To ListBox2.ListCount - 1

If ListBox2.Selected(i - counter) Then

ListBox2.RemoveItem (i - counter)

counter = counter + 1

End If

Next i

CheckBox2.Value = False

End Sub

Объяснение: Excel VBA перебирает второй список и, если он выбран, удаляет элемент. Переменная счетчик содержит след количества удаленных пунктов.

  1. Дважды щелкните на первой кнопке выбора.

  2. Добавьте следующие строки кода:

Private Sub OptionButton1_Click()

ListBox1.MultiSelect = 0

ListBox2.MultiSelect = 0

End Sub
  1. Дважды щелкните на кнопке второго варианта.

  2. Добавьте следующие строки кода:

Private Sub OptionButton2_Click()

ListBox1.MultiSelect = 1

ListBox2.MultiSelect = 1

End Sub
  1. Дважды щелкните на кнопке третьей опции.

  2. Добавьте следующие строки кода:

Private Sub OptionButton3_Click()

ListBox1.MultiSelect = 2

ListBox2.MultiSelect = 2

End Sub

Объяснение: Установка «Выберите тип» можно выбрать, нажав на кнопку опций. Картина UserForm, показанной ранее дает описание каждого параметра. Вместо настройки этого параметра во время выполнения, вы можете также настроить этот параметр во время разработки. Для достижения этого, нажмите правую кнопку мыши на элемент управления коробкой списка, а затем нажмите кнопку Свойства. Установите свойство MultiSelect до 0 — fmMultiSelectSingle, 1 — fmMultiSelectMulti или 2 — fmMultiSelectExtented.

  1. Дважды щелкните на первом флажке.

  2. Добавьте следующие строки кода:

Private Sub CheckBox1_Click()

If CheckBox1.Value = True Then

For i = 0 To ListBox1.ListCount - 1

ListBox1.Selected(i) = True

Next i

End If

If CheckBox1.Value = False Then

For i = 0 To ListBox1.ListCount - 1

ListBox1.Selected(i) = False

Next i

End If

End Sub

Объяснение: извлекая первый флажок, все элементы первого списка можно выбрать / отменить.

  1. Дважды щелкните на второй флажок, чтобы добавить одни и те же строки кода.

Только заменить CheckBox1 с CheckBox2 и ListBox1 с ListBox2.