Excel vba combobox очистить список

Добрый день.
В VBA новичек, прошу помощи. Есть макрос для заполyения Combobox:

[vba]

Код

Private Sub dobav_VMRP_ob()
For Each c In Worksheets(2).Range(«A4:A44»)
If VarType(c) <> vbEmpty Then Лист1.ComboBox1.AddItem (c)
Next c
For Each c In Worksheets(2).Range(«L4:L46»)
If VarType(c) <> vbEmpty Then Лист1.ComboBox2.AddItem (c)
Next c
For Each c In Worksheets(2).Range(«B2:H2»)
If VarType(c) <> vbEmpty Then Лист1.ComboBox3.AddItem (c)
Next c
End Sub

[/vba]

Также есть макрос для очистки Combobox:

[vba]

Код

Private Sub ochistka_ob()
For i = 1 To ComboBox1.ListCount
ComboBox1.RemoveItem 0
Next i
For i = 1 To ComboBox2.ListCount
ComboBox2.RemoveItem 0
Next i
For i = 1 To ComboBox3.ListCount
ComboBox3.RemoveItem 0
Next i
End Sub

[/vba]

Дело в том, что в зависимости от условия, данный Combobox будет заполняться разными данными (из разных диапазонов ячеек), перед этом очищаясь.
Первый раз заполняется нормально, но при выборе другого условия, после очистки, он пишет Permissions Denied на строке:

If VarType© <> vbEmpty Then Лист1.ComboBox1.AddItem ©

т.е. при добавлении других элементов в Combobox.

Прошу помощи.
[moder]Оформляйте коды тегами (кнопка #). Исправила[/moder]

 

Beginer_78

Пользователь

Сообщений: 22
Регистрация: 11.08.2019

Доброго времени суток всем.

 Есть комбо, заполняемый по дате. Требуется его очистить и заполнить новыми объектами при выборе новой даты. Но при нажатии на кнопку «новый выбор» имеем ошибку 381.
 Подскажите, как справиться с проблемой?

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#2

19.10.2019 10:56:17

Код
CB_Object.Clear
 

Beginer_78

Пользователь

Сообщений: 22
Регистрация: 11.08.2019

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Работает. Нет, не работает. Да ну, все работает…
Так и будем кидаться сообщениями да/нет или покажете, что не работает?

Рабочий файл с кучей лишнего — это не пример. Пример должен облегчить объяснение.
Для решения вопроса создайте простую форму с минимумом кода и элементов. Так и меньше времени отнимете у других, и помощь быстрее получите.

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Beginer_78, у Вас и в коде вопрос, как очистить КомбоБокс Я показал, как правильно его очищать. А ошибка возникает у Вас позже.

 

Beginer_78

Пользователь

Сообщений: 22
Регистрация: 11.08.2019

Комрады, извините.
Это именно ужатый вариант и CB_Object.Clear не работает именно в такой конструкции. Потому и выложил пример в таком виде.

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

А что, мой вариант не очищает КомбоБокс?

 

Beginer_78

Пользователь

Сообщений: 22
Регистрация: 11.08.2019

#8

19.10.2019 14:07:47

Вы правы. Как оказалось, Ваш вариант работает. Но  итоговая проблема возникновения ошибки не решена.(( Может есть идеи по преодолению проблемы?

Код
    Set Iobject = Range(CB_Object.Column(1)) 

В этой строчке возникает ошибка при нажатии на Cmb_VTZ.

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Beginer_78, а ведь можно было и не цитировать меня ))
Про «итоговую» проблему Вы в теме ничего не обозначили — только очистка КомбоБокса. Но подумайте сами: Вы сначала очищаете КомбоБокс, а потом переменной Iobject (типа Range) пытаетесь присвоить значение из КомбоБокса. Но ведь там УЖЕ пусто!

 

Beginer_78

Пользователь

Сообщений: 22
Регистрация: 11.08.2019

Доброго времени суток всем.
Прошу прощения за паузу, не было времени заниматься данным вопросом….

Подчистил пример.

Юрий М, прошу поясните пжл свою мысль.

Если нажимать кнопку «Новый выбор» при пустом комбо, то ошибки нет. В случае же заполненного по какой-либо дате из списка, выпрыгивает ошибка 381. Сould not get the column property. invalid property array index

Моему опыту не достает понимания, как с ней справиться…

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#11

30.10.2019 14:32:47

Цитата
Beginer_78 написал:
Подчистил пример

Перестарались: КомбоБокс не заполняется.

 

Beginer_78

Пользователь

Сообщений: 22
Регистрация: 11.08.2019

По датам, которые вносятся вручную из списка?

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Я не знаю, что и как должно заполняться: Вы же ничего об этом не говорите.
И перечитайте название этой темы: «Как очистить ComboBox«. Ответ дан ещё в #2. ComboBox Очищается?  Всё — вопрос исчерпан.
Если появились ДРУГИЕ вопросы — это в новой теме.

 

Beginer_78

Пользователь

Сообщений: 22
Регистрация: 11.08.2019

#14

30.10.2019 14:50:32

ОК.

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

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

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

Sub Test1()

    With UserForm1.ComboBox1

        .AddItem «Кружка»

        .AddItem «Стакан»

        .AddItem «Бокал»

        .AddItem «Пиала»

        .AddItem «Фужер»

    End With

UserForm1.Show

End Sub

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

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

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

Sub Test2()

    With UserForm1

        .ComboBox1.List = Array(«Кружка», «Стакан», «Бокал», «Пиала», «Фужер»)

        .Show

    End With

End Sub

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

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

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» активного листа уже известными значениями:

Sub Test4()

    With UserForm1

        .ComboBox1.RowSource = «A1:A5»

        .Show

    End With

End Sub

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

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

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

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

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

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

ComboBox1.RemoveItem Index

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

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

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

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

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

Private Sub UserForm_Initialize()

    ComboBox1.List = Лист8.[A1:A15].Value

End Sub

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

Private Sub UserForm_Initialize()

    With ComboBox1

        .Clear

        .AddItem «Апельсин»

        .AddItem «Банан»

        .AddItem «Виноград»

        .AddItem «Груша»

        .AddItem «Хурма»

    End With

End Sub

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

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

Private Sub Workbook_Open()

    Лист8.ComboBox1.List = Лист8.[A1:A15].Value

End Sub

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

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 при инициализации пользовательской формы:

Private Sub UserForm_Initialize()

    With ComboBox1

        .AddItem «Камень»

        .AddItem «Ножницы»

        .AddItem «Бумага»

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

        .Value = «Выберите значение»

    End With

End Sub

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

Private Sub UserForm_Initialize()

    With ComboBox1

        .AddItem «Камень»

        .AddItem «Ножницы»

        .AddItem «Бумага»

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

        .ListIndex = 0

    End With

End Sub

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


Обычно содержимое поля со списком можно очистить, очистив данные списка «Диапазон ввода». Но как насчет очистки содержимого всех полей со списком на листе Excel? В этой статье готовятся два кода VBA, которые помогут вам не только очистить содержимое поля со списком, но также очистить содержимое всех полей со списком одновременно на листе Excel.

Легко очистить содержимое поля со списком с помощью кода VBA


Легко очистить содержимое поля со списком с помощью кода VBA

Приведенные ниже два кода VBA могут помочь вам очистить содержимое поля со списком или всех полей со списком на активном листе. Пожалуйста, сделайте следующее.

1. На листе вам нужно очистить содержимое поля со списком, пожалуйста, нажмите другой + F11 в то же время, чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте ниже код VBA в окно кода.

VBA 1: очистить содержимое поля со списком на листе

Sub ClearAComboBox()
ActiveSheet.Shapes.Range(Array("Drop Down 2")).Select
With Selection
    .ListFillRange = ""
End With
End Sub

Внимание: В коде «Drop Down 2» — это имя поля со списком, из которого вы очистите содержимое. Пожалуйста, измените его на свой собственный.

VBA 2: очистить содержимое всех полей со списком на активном листе

Sub ClearComboBox()
    Dim xOle As OLEObject
    Dim xDrop As DropDown
    Application.ScreenUpdating = False
    For Each xOle In ActiveSheet.OLEObjects
        If TypeName(xOle.Object) = "ComboBox" Then
            xOle.ListFillRange = ""
        End If
    Next
    For Each xDrop In ActiveSheet.DropDowns
        xDrop.ListFillRange = ""
    Next
    Application.ScreenUpdating = True
End Sub

3. нажмите F5 или нажмите кнопку «Выполнить», чтобы запустить код.

Затем вы можете увидеть, что содержимое очищено в указанном поле со списком или во всех полях со списком на активном листе, как показано ниже:

Внимание: коды VBA могут применяться как к полю со списком (элемент управления формой), так и к полю со списком (элемент управления ActiveX).


Статьи по теме:

  • Как одновременно очистить содержимое и форматирование в ячейках в Excel?
  • Как очистить содержимое именованного диапазона в Excel?
  • Как очистить ограниченные значения в ячейках в Excel?
  • Как очистить указанное содержимое ячейки при изменении значения другой ячейки в Excel?
  • Как очистить указанное содержимое ячейки при открытии и выходе из книги Excel?

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (0)


Оценок пока нет. Оцените первым!

Понравилась статья? Поделить с друзьями:
  • Excel vba combobox запретить редактирование
  • Excel vba combobox выбранное значение
  • Excel vba combobox lists
  • Excel vba combobox collection
  • Excel vba com порт