我有一个 Excel 文档,其中有一个名为“员工”的表。
我想创建可以切换某些过滤器(开/关)的按钮。
例子:
Default table:
Id | Name | Last name | Status
---+-------+-----------+---------
1 | Alice | Alpha | Active
2 | Bob | Beta | Active
3 | Alice | Charlie | Inactive
4 | Carol | Delta | Active
5 | Lewis | Echo | Inactive
[Toggle active/all]:
Id | Name | Last name | Status
---+-------+-----------+---------
1 | Alice | Alpha | Active
2 | Bob | Beta | Active
4 | Carol | Delta | Active
[Toggle Alice/all]:
Id | Name | Last name | Status
---+-------+-----------+---------
1 | Alice | Alpha | Active
3 | Alice | Charlie | Inactive
这两个按钮只会在适当的列上创建过滤器,如果已经创建,则删除它。这样,我可以使用这两个按钮来过滤活跃的 Alice 员工。
[Toggle active/all] + [Toggle Alice/all]:
Id | Name | Last name | Status
---+-------+-----------+---------
1 | Alice | Alpha | Active
到目前为止,我可以通过这种方式创建一个过滤器:
' Create a filter on 'Alice'
ActiveWorkbook.Sheets("Employees").ListObjects("Employees").Range.AutoFilter Field:=2, Criteria1:="Alice"
' Create a filter on 'active'
ActiveWorkbook.Sheets("Employees").ListObjects("Employees").Range.AutoFilter Field:=4, Criteria1:="Active"
但我不知道如何检查这个过滤器是否被激活。
答案1
您需要在 Sheet 上创建一个切换按钮。
我来说说怎么做吧。
创建一个命令按钮,将其命名为 Fltrbutton,将其标题修改为 Alice。然后在 VB 编辑器中创建此代码。
Sub Fltrbutton_click()
ActiveSheet.AutofilterMode = False
If Fltrbutton.Caption = "Alice" then
ActiveSheet.Range("$A$2:$D$20").AutoFilter Field:=2, Criteria1:="Alice"
Fltrbutton.Caption = "Active"
Endif
If Fltrbutton.Caption = "Active" then
ActiveSheet.Range("$A$30:$D$50").AutoFilter Field:=4, Criteria1:="Active"
Fltrbutton.Caption = "Alice"
Endif
End Sub
我确实希望这个示例代码能够帮助您正确地执行这两个标准的代码。
注意:根据需要更改数据范围和其他内容。