![enter image description here](https://i.stack.imgur.com/SRy4g.png)
По существу, функция комбинированных списков будет аналогична критериям фильтра.Поэтому каждый раз, когда я изменяю значение комбинированного списка, событие AfterUpdate
запускает код, который должен обновить список, чтобы он содержал только те значения, которые соответствуют этим критериям.
Я планировал использовать Autofilter
для фактическогосделайте это, затем используйте SpecialCells(xlCellTypeVisible)
для установки источника строк.
Исходный код Идея:
Private Sub cbxSupplier_AfterUpdate()
Dim Suppler_col As Long
Supplier_col = ThisWorkbook.Worksheets("Foil Profile").ListObjects("tblFoilProfile").ListColumns("SUPPLIER").Index
filterRangeFoilProfile.AutoFilter Field:=Supplier_col, Criteria1:=cbxSupplier.Text
lbxFoilInfoDisplay.RowSource = ThisWorkbook.Worksheets("Foil Profile").ListObjects("tblFoilProfile").Range.SpecialCells(xlCellTypeVisible)
End Sub
Однако моя проблема заключается в том, что метод Rowsource
использует строку, предполагающую ссылку на формулу Excelнапример, следующее: lbxFoilInfoDisplay.RowSource ="'Foil Profile'!A1:K5"
и вы не можете использовать язык VBA для назначения значений метода источника строк.
Проблема здесь заключается в том, что даже значения между отфильтрованным диапазоном будут использоваться в Rowsource
,Обходной путь заключается в том, чтобы скопировать в «лист справки» видимые ячейки таблицы, используя вместо этого SpecialCells(xlCellTypeVisible)
, но меня беспокоит то, что мне нужно будет очистить весь лист справки в событии After Update
для каждоговремя значение комбинированного списка было изменено.
Могу ли я спросить, есть ли более быстрый / простой / более эффективный способ действительно выполнить эту задачу?