VBA Excel. ComboBox — заполнение поля со списком

    Заполнение ComboBox данными с помощью кода VBA Excel. Добавление значений в поле со списком методом AddItem, из массива и из диапазона рабочего листа. Примеры.

    Заполнение ComboBox методом AddItem

    Создайте пользовательскую форму UserForm1 и разместите на ней поле со списком ComboBox1. Используйте метод AddItem для заполнения элемента управления значениями:

    Скопируйте код и запустите его выполнение, на открывшейся форме раскройте поле со списком, в результате увидите, что элемент управления ComboBox1 заполнен соответствующими значениями:

    ComboBox, заполненный значениями методом .AddItem

    Заполнение ComboBox значениями из массива

    Для заполнения элемента управления ComboBox значениями из массива будем использовать свойство поля со списком List и функцию Array:

    Результат выполнения кода будет таким же, как и на предыдущем изображении.

    Таким же образом можно использовать не только функцию Array, но и переменную массива, предварительно объявленную и заполненную значениями:

    Заполнение ComboBox значениями из ячеек

    Для заполнения поля со списком значениями из диапазона ячеек рабочего листа будем использовать свойство комбинированного списка RowSource, предварительно заполнив диапазон «A1:A5» активного листа уже известными значениями:

    ComboBox, заполненный значениями из диапазона ячеек

    Чтобы присвоить элементу управления ComboBox значения из диапазона ячеек любого рабочего листа, добавьте ссылку на него перед наименованием диапазона, например, замените «A1:A5» на «Лист1!A1:A5», и поле со списком будет заполнено значениями ячеек «A1:A5», расположенных на листе с именем «Лист1». Имя листа берется из наименования ярлыка.

    Очистка ComboBox от значений

    Очистить ComboBox можно как от всех значений сразу, так и удалить один или несколько значений (по одному) из списка.

    Очистка ComboBox от всего списка значений:

    Очистка ComboBox от одного значения:

    где Index — порядковый номер элемента в списке ComboBox, нумерация начинается с нуля.

    Автоматическое заполнение ComboBox

    Предполагается, что, при открытии пользовательской формы или рабочего листа с ComboBox, поле со списком должно быть уже заполнено значениями. Как это сделать?

    Заполнение ComboBox на форме

    Автоматическое заполнение элемента управления ComboBox на пользовательской форме осуществляется с помощью процедуры UserForm_Initialize, размещенной в модуле этой формы:

    Или по одному:

    Заполнение ComboBox на листе

    Автоматическое заполнение элемента управления ComboBox из коллекции «Элементы ActiveX» на рабочем листе осуществляется с помощью процедуры Workbook_Open, размещенной в модуле «ЭтаКнига»:

    Или по одному:


    Более подробно о заполнении данными ComboBox можно прочитать в статье о заполнении ListBox, так как оба эти элемента управления используют одинаковые способы заполнения.

    Иногда возникает необходимость заполнения элементов управления ListBox и ComboBox уникальными значениями из диапазона ячеек с повторяющимся содержимым. Смотрите, как отсортировать уникальные элементы из списка с помощью объектов Collection и Dictionary.

    Вы можете скачать файл Excel с представленными выше примерами. Файл упакован в ZIP-архив. Для проверки работоспособности кода, непосредственно в редакторе VBA помещайте курсор внутри тела каждой процедуры и нажимайте кнопку «Run Sub».

    ComboBox — значение по умолчанию

    Добавление значения по умолчанию вручную

    Значение по умолчанию для текстового поля ComboBox можно задать вручную в окне свойств (Properties) выбранного элемента управления:

    Выберите ComboBox на форме в редакторе VBA и в окне Properties в поле Value впишите нужное значение.

    Программное добавление значения по умолчанию

    Добавление произвольного значения по умолчанию в текстовое поле ComboBox при инициализации пользовательской формы:

    Добавление значения по умолчанию в текстовое поле ComboBox из имеющегося списка:

    Нумерация списка ComboBox начинается с нуля, поэтому приведенный выше код отобразит значение по умолчанию — «Камень».


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    14 комментариев для “VBA Excel. ComboBox — заполнение поля со списком”

    1. Не получился ни один из предложенных вариантов( С чем это может быть связано?

      1. Спасибо за примеры, на одном все получилось. Чуток лишнее удалил и все ОК.
        Потому что пример привязан к тестовому объекту.
        Я тоже не мог понять, при отсутствии навыков.
        Но вот четко к полю привязку по примеру удалось сделать.
        Аналогично в powerpoint вставка поля со списком

    2. Евгений

      Оксана, скорее всего у вас имена UserForm и ComboBox другие, чем в приведенных примерах. Я сегодня в конце статьи размещу файл для скачивания с этими примерами.

    3. Евгений, подскажите, а где в Вашем примере пользовательская форма? Что бы наглядно посмотреть)

    4. Или это что-то у меня((( При нажатии на Run Sub в вашем файле, у меня тоже нет списка(

    5. Евгений

      UserForm1 находится в папке «Forms» в проводнике редактора VBA под строчкой «ЭтаКнига». Возможно, у вас в параметрах Excel отключены макросы, поэтому коды не работают.

    6. Я одного не пойму, а если у меня данные в строку расположены, почему я не могу загнать их в выпадающий список ComboBox?

      1. Евгений

        Можно добавить данные и из строки:

        1. Благодарю за внимание! Но я имел ввиду что данные для выпадающего списка расположены в строку на листе. То есть в ячейках. Например в диапазоне A1:H1.

          1. Евгений

    7. Очень интересно, только вот работает при userForm1 инициализации, а если я вставил combobox прям на лист Excel, как обратиться к combobox, чтобы заполнить выпадающий список?

    8. Александр

      Здравствуйте, не работает в том числе и ваш код из приложенной ссылки. Выпадающий список в любом случае получается пустой.

      1. Евгений

        Здравствуйте, Александр!
        Только что проверил, ComboBox1 в скачанном файле заполняется. Возможно, вы запускаете UserForm1, а надо запускать по очереди процедуры Test1-Test4 в Module1, предварительно поставив перед запуском в каждую из них курсор.

    Добавить комментарий

    Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора.