Excel VBA Multicolumn Combo Box
Ниже мы рассмотрим программу в Excel VBA, который создает UserForm, содержащее многоколончатый со списком.
UserForm мы собираемся создать выглядит следующим образом:
Для создания этого UserForm, выполните следующие действия.
-
Откройте редактор Visual Basic. Если проводник проекта не отображается, нажмите кнопку Просмотр, Project Explorer.
-
Нажмите кнопку Вставить, UserForm. Если панель инструментов не появляется автоматически, нажмите кнопку View, Toolbox. Экран должен быть установлен, как показано ниже.
-
Добавьте кнопки этикетки, поля со списком и команд. После того, как это было закончено, результат должен быть согласован с изображением UserForm, показанным ранее. Например, можно создать элемент управления Поле со списком, нажав на ComboBox из панели инструментов. Далее, вы можете перетащить выпадающий на UserForm.
-
Вы можете изменить имена и подписи элементов управления. Имена используются в коде Excel VBA. Титры являются те, которые появляются на экране. Это хорошая практика, чтобы изменить имена элементов управления, но не надо здесь, потому что у нас есть только несколько элементов управления в этом примере. Для того, чтобы изменить заголовок кнопки UserForm, метки и команды, выберите Вид, Свойства окна и нажмите на каждого элемента управления.
-
Для того, чтобы показать UserForm, поместить командную кнопку на листе и добавьте следующие строки кода:
Private Sub CommandButton1_Click() UserForm1.Show End Sub
Сейчас мы собираемся создать Sub UserForm_Initialize. При использовании метода Show для UserForm, этот подпункт будет автоматически выполняться.
-
Откройте редактор Visual Basic.
-
В окне Project Explorer, щелкните правой кнопкой мыши на UserForm1, а затем нажмите кнопку Просмотр кода.
-
Выберите UserForm из списка левого выпадающего списка. Выберите Initialize справа в раскрывающемся списке.
-
Добавьте следующие строки кода:
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.
-
В окне проекта дважды щелкните на UserForm1.
-
Дважды щелкните на кнопке OK.
-
Добавьте следующие строки кода:
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» заявление игнорирует ошибку, когда заливка пользователя в его / ее собственном фильме (в данном случае нет жанра доступен).
-
Дважды щелкните на кнопке Отмена.
-
Добавьте следующую строку кода:
Private Sub CommandButton2_Click() Unload Me End Sub
Результат при выборе скорости и нажмите кнопку OK.