为什么我在一个案例中键入listobject.autofilter而在另一个案例中键入listobject.range.autofilter?

时间:2014-11-11 15:09:07

标签: vba excel-vba excel

Dim lo as listobject

'Show all data
lo.AutoFilter.ShowAllData

'Set new filter
lo.Range.AutoFilter Field:="X", Criteria1:=vFilterCriteria, Operator:=xlFilterValues

以上两行都有效。如果我删除.Range,则第二行不起作用。但上述内容并不要求我写.Range。为什么案件不同?

2 个答案:

答案 0 :(得分:2)

它只是对象模型的工作方式。

在引入表(ListObjects)之前,您只能将一个自动过滤器应用于工作表。您使用Range对象的Autofilter方法应用它 - 可能与您应用高级过滤器的方式一致,并且可能与旧的XLM FILTER命令一致。

Worksheet的Autofilter属性返回了Autofilter对象,该对象允许您清除过滤器的过滤器或 test 属性,但不能更改它们。 (工作表也有一个ShowAllData方法,因为你可以使用高级过滤器和自动过滤器)

我只能推测,当引入Tables(listobjects)时,简单地将同一个Autofilter对象实现为表的属性更容易。

答案 1 :(得分:0)

与此历史记录相关的其他奇数-如果您的活动单元格或选择位于具有活动过滤器的ListObject表中,则activeworksheet.filtermode = true;如果在表外,则activeworksheet.filtermode = false。普通的过滤范围不会发生这种输入/输出差异