однако даже при правильной фильтрации он также добавляет отфильтрованные строки.
Me.cmbTasks.List = db.ListColumns (13) .DataBodyRange.Value
Это потому, что вы делаете это неправильно. Вы имеете в виду полный столбец, а не отфильтрованный диапазон. Попробуйте это
Dim db As ListObject
Set db = Worksheets("baseOfData").ListObjects("database")
db.Range.AutoFilter Field:=1, Criteria1:="<>"
Me.cmbTasks.List = db.DataBodyRange.Columns(13).SpecialCells(xlCellTypeVisible).Value
Следующая проблема, с которой вы можете столкнуться, заключается в том, что она будет показывать значения с первого Area
, только если имеется несколько областей.
Чтобы справиться с этим, попробуйте
Dim db As ListObject
Dim aCell As Range, rngArea As Range
Set db = Worksheets("baseOfData").ListObjects("database")
db.Range.AutoFilter Field:=1, Criteria1:="<>"
'~~> Loop through each area
For Each rngArea In db.DataBodyRange.Columns(13).SpecialCells(xlCellTypeVisible).Areas
'~~> Loop though each cell in the area
For Each aCell In rngArea
cmbTasks.AddItem aCell.Value
Next aCell
Next rngArea