Range.AutoFilter只使用最后一个标准? VBA

时间:2013-02-15 20:19:06

标签: vba autofilter

我有一张桌子,我想移动到其他地方,我想删除大部分数据(有很多空白或0我真的不在乎)。以下是我到目前为止的代码:

Dim srcRange As Range
Dim copysheet As Worksheet

Set copysheet = ActiveSheet

Set srcRange = copysheet.range("B1:D1598")
srcRange.AutoFilter Field:=3, Criteria1:=Array("#VALUE!", "Count", 0, Empty)
srcRange.Delete

使用此设置只会删除空白,因此我使用以下变体对其进行了几次测试:

'this code will return only the 0's
Dim srcRange As Range
Dim copysheet As Worksheet

Set copysheet = ActiveSheet

Set srcRange = copysheet.range("B1:D1598")
srcRange.AutoFilter Field:=3, Criteria1:=Array("#VALUE!", "Count", 0)

'this code will return only the "count"'s
Dim srcRange As Range
Dim copysheet As Worksheet

Set copysheet = ActiveSheet

Set srcRange = copysheet.range("B1:D1598")
srcRange.AutoFilter Field:=3, Criteria1:=Array("#VALUE!", "Count")

所以我得出的结论是,由于某种原因,AutoFilter工具只按我在criteria1中放入的最后一个标准进行过滤。有谁能给我一些关于为什么的见解?

仅供参考 - 我的临时工作是运行4个过滤/删除命令而不是一个,它正常工作 - 我只是想了解一下导致这种情况的原因。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要将Operator:=xlFilterValues添加到自动过滤调用中:

srcRange.AutoFilter Field:=3, Criteria1:=Array("#VALUE!", "Count"), Operator:=xlFilterValues

这将过滤Criteria1

中提供的所有元素