我正在尝试基于源表获得动态过滤的表。
我现在正在尝试两种不同的方法:第一种是使用带有AutoFilter
的ActiveX文本框,第二种是使用带有AdvancedFilter
和按钮的高级筛选器。
以下是我用于文本框的代码:
Private Sub textbox_filter_Change()
Dim strFilter As String
Set tbl_repo = ActiveWorkbook.Worksheets("owssvr").ListObjects("repo")
strFilter = "*" & [B1] & "*"
Debug.Print strFilter
tbl_repo.Range.AutoFilter _
Field:=1, _
Criteria1:=strFilter, _
Operator:=xlFilterValues
End Sub
这里是高级过滤器按钮:
Private Sub advanced_filter_Click()
Dim strFilter As String
Set tbl_repo = ActiveWorkbook.Worksheets("owssvr").ListObjects("repo")
tbl_repo.Range.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Sheet2").Range("B1:D2"), _
CopyToRange:=Range("A3"), _
Unique:=False
End Sub
现在,我的问题是哪种解决方案将是实现用户最简单体验的最佳解决方案。我想发生的事情是,每当在“病原体”下键入某些内容时,新的过滤表应出现在过滤器下方。
在文本框中,过滤器保留在源表中,并且删除所有内容仍不能删除过滤器,因为“空白”单元格仍未显示。
在第二种情况下,过滤器不是动态的,这意味着用户必须单击按钮才能加载新表。在这种特殊设置下,表将被覆盖,而不是每次都被删除并重新创建,但是在运行新过滤器之前清除它应该并不难。
在两种情况下,我都没有自动完成功能。
您能帮我吗?