Использование элементов из комбинированного блока VBA (управление формой, внутри рабочего листа) для запуска макросов
Так что я хотел достичь, когда кто-то нажимает на определенный год внутри поля со списком (которое находится возле ячейки A1 на моем листе), макрос запускается в соответствии с выбранным годом. Я хочу, чтобы элементы списка сохранялись в самом коде VBA, вместо того, чтобы выбирать их на листе (я не нашел ни одного учебника о поле со списком, которое не использует данные рабочего листа).
Я создал кнопку для загрузки данных в ComboBox1.
Это код на данный момент (я не пытаюсь придерживаться его строго, поэтому, если есть более простой способ написать это, сообщите мне):
- Как использовать константу Named Array для заполнения ActiveX-ComboBox в Excel
- Заполнение ComboBox с помощью цикла For из таблицы
- Откройте книгу Excel из ComboBox (VB.NET)
- Заполнение ComboBox со значениями Row в Excel VBA
- Более сжатый код для динамической ссылки на ComboBox
Sub Button1_Click() Sheets("MacroBase").ComboBox1.List = Array("2015", "2016", "2017", "2018", "2019") End Sub Sub ComboBox1_GotFocus() With ThisWorkbook.Sheets("MacroBase").Shapes("ComboBox1").ControlFormat Select Case .List(.Value) Case "2015": ShowOnly2015Columns Case "2016": ShowOnly2016Columns Case "2017": ShowOnly2017Columns Case "2018": ShowOnly2017Columns Case "2019": ShowOnly2019Columns End With End Sub
Я не вставлял код для ShowOnly #### Columns (протестирован и работает без проблем).
В настоящее время _GotFocus не работает.
Я благодарю заранее за все ваше время и помощь 🙂
- VBA: как ссылаться на объект ComboBox
- Как импортировать выбранные листы с помощью FileDialog?
- Пользователь VSTO Excel Addin WPF UI
- Excel Combobox _Click активируется при обновлении сводной таблицы
- Алфавитная сортировка и фильтрация комбинированного поля, которое автоматически заполняется с использованием имен листов
- Excel - зависимая проверка данных ComboBox на одном клике
- Excel VBA: создание пользовательской формы с динамическими comboboxes, содержание которой изменяется в зависимости от данных родительского combobox
- Заполнение нескольких командбоксов делает медленную пользовательскую форму VBA
использовать это
Sheets(1).Shapes("ComboBox1").ControlFormat.List = Array("2015", "2016", "2017", "2018", "2019")
убедитесь, что Sheets(1)
относятся к рабочему листу, ваш combobox ComboBox1 на самом деле находится в
было бы безопаснее использовать имя листа, например,
Sheets("mySheet").Shapes("ComboBox1").ControlFormat.List = Array("2015", "2016", "2017", "2018", "2019")
наконец, если вы хотите заполнить поле со списком с содержимым диапазона рабочего листа, чем вы использовали:
Sheets("mySheet").Shapes("ComboBox1").ControlFormat.ListFillRange = "'My Sheet'!A1:A5"
Существует 2 типа списков со списком.
См. Этот вопрос и ответ. Это должно заставить вас идти.
Запуск макроса при нажатии на ComboBox
Вы можете принять событие GotFocus
и заполнить поле со списком.