首页 > 解决方案 > 组合框,我如何从通过 listobject 检索的列表中排除空白

问题描述

尝试将数据应用于组合框,效果很好,除了它还包括过滤值。

  1. 我在字段 1 上过滤,按数字过滤,这一行中有几个空单元格,那些在字段 1 中有空单元格的单元格我这次不想看到。

  2. 我将第 13 列中的 databodyrange 值填充到组合框列表中,但是即使正确过滤,它也会添加我过滤掉的行。

代码..

Private Sub UserFrom_Initialize()
  Dim db As ListObject
  Set db = Worksheets("baseOfData").ListObjects("database")

  db.Range.AutoFilter Field:=1, Criteria1:="<>"
  Me.cmbTasks.List = db.ListColumns(13).DataBodyRange.Value
End Sub

我可以通过运行一个 for 循环来解决它,并在添加它之前检查每个单元格,但这会有点违背使用 2 行代码完成所有操作的目的。

有什么建议么

标签: excelvba

解决方案


但是,即使正确过滤,它也会添加我过滤掉的行。

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

在此处输入图像描述


推荐阅读