Ниже мы рассмотрим программу в Excel VBA, который создает UserForm, содержащее многоколончатый со списком.

UserForm мы собираемся создать выглядит следующим образом:

Multicolumn Combo Box in Excel VBA

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

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

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

Userform Screen Setup in Excel VBA

  1. Добавьте кнопки этикетки, поля со списком и команд. После того, как это было закончено, результат должен быть согласован с изображением UserForm, показанным ранее. Например, можно создать элемент управления Поле со списком, нажав на ComboBox из панели инструментов. Далее, вы можете перетащить выпадающий на UserForm.

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

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

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

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

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

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

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

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

Private Sub UserForm_Initialize()

ComboBox1.ColumnCount = 2

Dim Films(1 To 5, 1 To 2) As String

Dim i As Integer, j As Integer

Films(1, 1) = "Lord of the Rings"

Films(2, 1) = "Speed"

Films(3, 1) = "Star Wars"

Films(4, 1) = "The Godfather"

Films(5, 1) = "Pulp Fiction"

Films(1, 2) = "Adventure"

Films(2, 2) = "Action"

Films(3, 2) = "Sci-Fi"

Films(4, 2) = "Crime"

Films(5, 2) = "Drama"

ComboBox1.List = Films

End Sub

Объяснение: первая строка кода задает число столбцов в поле со списком в 2. Вместо установки количества столбцов во время выполнения, вы можете также настроить этот параметр во время разработки. Для достижения этой цели, правой кнопкой мыши на элементе управления Поле со списком, нажмите кнопку Свойства и установите свойство ColumnCount до 2. Далее, мы объявляем и инициализируем двумерный массив. Последняя строка кода присваивает массив в поле со списком.

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

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

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

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

Private Sub CommandButton1_Click()

Unload Me

MsgBox "You selected " & ComboBox1.Value

On Error Resume Next

MsgBox "You like " & ComboBox1.Column(1) & " movies"

End Sub

Примечание: эти строки кода закрыть Excel VBA UserForm и отобразить выбранный элемент и жанр. «On Error Resume Next» заявление игнорирует ошибку, когда заливка пользователя в его / ее собственном фильме (в данном случае нет жанра доступен).

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

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

Private Sub CommandButton2_Click()

Unload Me

End Sub

Результат при выборе скорости и нажмите кнопку OK.

Multicolumn Combo Box Result

Multicolumn Combo Box Result