Заполнение ComboBox данными с помощью кода VBA Excel. Добавление значений в поле со списком методом AddItem, из массива и из диапазона рабочего листа. Примеры.
Заполнение ComboBox методом AddItem
Создайте пользовательскую форму UserForm1 и разместите на ней поле со списком ComboBox1. Используйте метод AddItem для заполнения элемента управления значениями:
1 2 3 4 5 6 7 8 9 10 |
Sub Test1() With UserForm1.ComboBox1 .AddItem "Кружка" .AddItem "Стакан" .AddItem "Бокал" .AddItem "Пиала" .AddItem "Фужер" End With UserForm1.Show End Sub |
Скопируйте код и запустите его выполнение, на открывшейся форме раскройте поле со списком, в результате увидите, что элемент управления ComboBox1 заполнен соответствующими значениями:
Заполнение ComboBox значениями из массива
Для заполнения элемента управления ComboBox значениями из массива будем использовать свойство поля со списком List и функцию Array:
1 2 3 4 5 6 |
Sub Test2() With UserForm1 .ComboBox1.List = Array("Кружка", "Стакан", "Бокал", "Пиала", "Фужер") .Show End With End Sub |
Результат выполнения кода будет таким же, как и на предыдущем изображении.
Таким же образом можно использовать не только функцию Array, но и переменную массива, предварительно объявленную и заполненную значениями:
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Test3() Dim a(4) As String a(0) = "Кружка" a(1) = "Стакан" a(2) = "Бокал" a(3) = "Пиала" a(4) = "Фужер" With UserForm1 .ComboBox1.List = a .Show End With End Sub |
Заполнение ComboBox значениями из ячеек
Для заполнения поля со списком значениями из диапазона ячеек рабочего листа будем использовать свойство комбинированного списка RowSource, предварительно заполнив диапазон «A1:A5» активного листа уже известными значениями:
1 2 3 4 5 6 |
Sub Test4() With UserForm1 .ComboBox1.RowSource = "A1:A5" .Show End With End Sub |
Чтобы присвоить элементу управления ComboBox значения из диапазона ячеек любого рабочего листа, добавьте ссылку на него перед наименованием диапазона, например, замените «A1:A5» на «Лист1!A1:A5», и поле со списком будет заполнено значениями ячеек «A1:A5», расположенных на листе с именем «Лист1». Имя листа берется из наименования ярлыка.
Очистка ComboBox от значений
Очистить ComboBox можно как от всех значений сразу, так и удалить один или несколько значений (по одному) из списка.
Очистка ComboBox от всего списка значений:
1 |
ComboBox1.Clear |
Очистка ComboBox от одного значения:
1 |
ComboBox1.RemoveItem Index |
где Index — порядковый номер элемента в списке ComboBox, нумерация начинается с нуля.
Автоматическое заполнение ComboBox
Предполагается, что, при открытии пользовательской формы или рабочего листа с ComboBox, поле со списком должно быть уже заполнено значениями. Как это сделать?
Заполнение ComboBox на форме
Автоматическое заполнение элемента управления ComboBox на пользовательской форме осуществляется с помощью процедуры UserForm_Initialize, размещенной в модуле этой формы:
1 2 3 |
Private Sub UserForm_Initialize() ComboBox1.List = Лист8.[A1:A15].Value End Sub |
Или по одному:
1 2 3 4 5 6 7 8 9 10 |
Private Sub UserForm_Initialize() With ComboBox1 .Clear .AddItem "Апельсин" .AddItem "Банан" .AddItem "Виноград" .AddItem "Груша" .AddItem "Хурма" End With End Sub |
Заполнение ComboBox на листе
Автоматическое заполнение элемента управления ComboBox из коллекции «Элементы ActiveX» на рабочем листе осуществляется с помощью процедуры Workbook_Open, размещенной в модуле «ЭтаКнига»:
1 2 3 |
Private Sub Workbook_Open() Лист8.ComboBox1.List = Лист8.[A1:A15].Value End Sub |
Или по одному:
1 2 3 4 5 6 7 8 9 10 |
Private Sub Workbook_Open() With Лист8.ComboBox1 .Clear .AddItem "Апельсин" .AddItem "Банан" .AddItem "Виноград" .AddItem "Груша" .AddItem "Хурма" End With End Sub |
Более подробно о заполнении данными ComboBox можно прочитать в статье о заполнении ListBox, так как оба эти элемента управления используют одинаковые способы заполнения.
Иногда возникает необходимость заполнения элементов управления ListBox и ComboBox уникальными значениями из диапазона ячеек с повторяющимся содержимым. Смотрите, как отсортировать уникальные элементы из списка с помощью объектов Collection и Dictionary.
Вы можете скачать файл Excel с представленными выше примерами. Файл упакован в ZIP-архив. Для проверки работоспособности кода, непосредственно в редакторе VBA помещайте курсор внутри тела каждой процедуры и нажимайте кнопку «Run Sub».
ComboBox — значение по умолчанию
Добавление значения по умолчанию вручную
Значение по умолчанию для текстового поля ComboBox можно задать вручную в окне свойств (Properties) выбранного элемента управления:
Выберите ComboBox на форме в редакторе VBA и в окне Properties в поле Value впишите нужное значение.
Программное добавление значения по умолчанию
Добавление произвольного значения по умолчанию в текстовое поле ComboBox при инициализации пользовательской формы:
1 2 3 4 5 6 7 8 9 |
Private Sub UserForm_Initialize() With ComboBox1 .AddItem "Камень" .AddItem "Ножницы" .AddItem "Бумага" 'Добавление произвольного значения по умолчанию .Value = "Выберите значение" End With End Sub |
Добавление значения по умолчанию в текстовое поле ComboBox из имеющегося списка:
1 2 3 4 5 6 7 8 9 |
Private Sub UserForm_Initialize() With ComboBox1 .AddItem "Камень" .AddItem "Ножницы" .AddItem "Бумага" 'Добавление значения по умолчанию из списка .ListIndex = 0 End With End Sub |
Нумерация списка ComboBox начинается с нуля, поэтому приведенный выше код отобразит значение по умолчанию — «Камень».
Не получился ни один из предложенных вариантов( С чем это может быть связано?
Спасибо за примеры, на одном все получилось. Чуток лишнее удалил и все ОК.
Потому что пример привязан к тестовому объекту.
Я тоже не мог понять, при отсутствии навыков.
Но вот четко к полю привязку по примеру удалось сделать.
Аналогично в powerpoint вставка поля со списком
Оксана, скорее всего у вас имена UserForm и ComboBox другие, чем в приведенных примерах. Я сегодня в конце статьи размещу файл для скачивания с этими примерами.
Евгений, подскажите, а где в Вашем примере пользовательская форма? Что бы наглядно посмотреть)
Или это что-то у меня((( При нажатии на Run Sub в вашем файле, у меня тоже нет списка(
UserForm1 находится в папке «Forms» в проводнике редактора VBA под строчкой «ЭтаКнига». Возможно, у вас в параметрах Excel отключены макросы, поэтому коды не работают.
Я одного не пойму, а если у меня данные в строку расположены, почему я не могу загнать их в выпадающий список ComboBox?
Можно добавить данные и из строки:
Благодарю за внимание! Но я имел ввиду что данные для выпадающего списка расположены в строку на листе. То есть в ячейках. Например в диапазоне A1:H1.
Очень интересно, только вот работает при userForm1 инициализации, а если я вставил combobox прям на лист Excel, как обратиться к combobox, чтобы заполнить выпадающий список?
Здравствуйте, Михаил!
Я добавил эту информацию в статью.
Здравствуйте, не работает в том числе и ваш код из приложенной ссылки. Выпадающий список в любом случае получается пустой.
Здравствуйте, Александр!
Только что проверил, ComboBox1 в скачанном файле заполняется. Возможно, вы запускаете UserForm1, а надо запускать по очереди процедуры Test1-Test4 в Module1, предварительно поставив перед запуском в каждую из них курсор.
Обсуждение закрыто.