希望在 D 列上创建一个过滤器,使其具有“否”和 E 列“空白”。我通过录制宏来完成这些,如下所示。但是,我无法创建宏按钮并应用于所有工作表,因为 excel 为每个工作表分配了不同的表名。
例如,下面的一个已分配Table6814151416171924282737404145498914。无论如何要解决这个问题,以便我可以拥有一个可以跨工作表应用的按钮?
Sub yet2attend()
'
' yet2attend Macro
'
'
ActiveSheet.ListObjects("**Table6814151416171924282737404145498914**").Range. _
AutoFilter Field:=4, Criteria1:="NO"
ActiveSheet.ListObjects("**Table6814151416171924282737404145498914**").Range. _
AutoFilter Field:=5, Criteria1:="="
End Sub
如果我能解决这个问题,我将创建一个宏按钮来重置/删除过滤器。谢谢
每个工作表是否有多个表格?
每个表都存储为一个 ListObject 对象,您可以使用
ListObjects
Worksheet 对象的属性来指向您的表,这也是您在代码中所做的。因此,您可以遍历工作表,并为每个表应用过滤器。如果每张表只有一个表,则使用
index
而不是名称很容易,因为它始终是工作表上的第一个表。或者,如果按钮是每个工作表的,并且只应该过滤您所在的工作表,您可以使用您所拥有的并将名称更改为索引。
如果您每张表有多个表,并且您想要一种通用方法,那么它们需要有一些共同点。
如果您不能确保它们具有相同的索引,但它们都在同一范围内,您可以使用它来告诉 Excel 您要过滤哪个表。
通过使用该
Intersect
方法,我们可以检查某物是否占据特定范围。并且该ListObjects.Range
属性返回表格的范围。Intersect(ActiveSheet.ListObjects(1).Range, Range("A1")
将返回两个范围相交的范围(如果有)。我们对知道 WHERE 不感兴趣,但如果。如果范围不相交,
Intersect
将返回nothing
. 知道了这一点,我们可以遍历工作表的表格,并且只影响不返回任何内容的表格 - 因此在我们的范围内。