excel - 从整个工作表(多个表)中清除自动筛选
问题描述
我正在做一个项目,我添加了一个按钮来自动隐藏/取消隐藏我的输入部分中未使用的行。我在另一个只包含一个表格的页面上使用了它,它工作得很好。但是,在此工作表上,该按钮可将过滤器应用于所有表格,但是,当我点击按钮取消隐藏时,它只会清除工作表上第一个表格中的自动过滤器,但其他表格上的过滤器仍保持打开状态。我不确定这里发生了什么,但我在下面附上了我的代码:
Private Sub OpAssumptionsToggle_Click()
'Declarations
Set ActIncAss = ListObjects("ActualIncomeAssumptions")
Set ActExpAss = ListObjects("ActualExpenseAssumptions")
Set S1IncAss = ListObjects("S1IncomeAssumptions")
Set S1ExpAss = ListObjects("S1ExpenseAssumptions")
Set S2IncAss = ListObjects("S2IncomeAssumptions")
Set S2ExpAss = ListObjects("S2ExpenseAssumptions")
Set PFIncAss = ListObjects("PFIncomeAssumptions")
Set PFExpAss = ListObjects("PFExpenseAssumptions")
'Select Range
ActIncAss.Range.Select
'Hide/Unhide Rows
If ActiveSheet.FilterMode Then
ActiveSheet.AutoFilter.ShowAllData
Else
ActIncAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
ActExpAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
S1IncAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
S1ExpAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
S2IncAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
S2ExpAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
PFIncAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
PFExpAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
End If
'Unselect and Select A1
Application.CutCopyMode = False
Range("A1").Select
End Sub
解决方案
清除每个表的过滤器;可能最容易循环:
Dim tbl As ListObject
For Each tbl in ActiveSheet.ListObjects
tbl.AutoFilter.ShowAllData
Next
请注意,您可以将此逻辑扩展到应用过滤器:
For Each tbl in ActiveSheet.ListObjects
tbl.Range.AutoFilter Field:=6, Criteria1:="<>0"
Next
推荐阅读
- git - git diff changes with name only 正确显示更改,但不包括从开始的提交中更改的文件
- docker - 为什么我不能从我的 docker 容器 curl 到远程服务
- php - 如何在 Yii2 中使用表关系获取记录的更多详细信息
- r - 将字符串转换为时间格式,以便计算差异
- amazon-web-services - 如何将密钥从我的桌面导入到 cloudformation 模板?
- javascript - 发送推文失败。错误为:{"name":"Exception"} - Google 应用脚本
- css - 我应该怎么做才能使搜索框的边缘变圆?
- reactjs - Redux 操作在 mapStateToProps 函数中抛出“TypeError:无法读取未定义的属性 'num_of_players'”
- f# - F#如何为主从数据构造一个Linq查询?
- character - 如何在 user.js 文件中键入看起来像汉堡菜单的三行等号?