在我的Excel电子表格中,我有一个数据表设置
我还有两个按钮
将第四列过滤为0
以上的任何值With ActiveSheet
.Range("A138:H246").Select
Selection.AutoFilter Field:=4, Criteria1:=">0", Operator:=xlAnd
End With
另一个(应该)删除过滤器
With ActiveSheet
.Range("A138:H246").Select
Selection.AutoFilter Field:=4
End With
但是,删除过滤器的按钮不起作用,我一直收到以下消息
"调用的对象已从其客户端autofilter"
断开连接我已经尝试过录制宏然后使用该代码但是如果按下按钮按下代码就会失败
有什么想法吗?
答案 0 :(得分:0)
我建议您在完成过滤后的数据时使用以下语句。
希望这有帮助吗?
Activesheet.AutoFilterMode = false
正如你所说,当你尝试将其设置为false时,如果autofilter已经为假,这会导致错误,但是如果你将这一行放在正确位置的代码中,那么当你想将它设置为false时,过滤器将始终为true 。如下
ActiveSheet.Range("someRange").AutoFilter Field:=27, Criteria1:="test"
' do something with filtered data
ActiveSheet.AutoFilterMode = False
这对我来说没有错误......
答案 1 :(得分:0)
ActiveSheet.ShowAllData
它只是清除所有过滤器,但它不会停用自动过滤模式,这还够吗?
以下是扫描所有已使用列并存储隐藏状态的代码,然后再显示所有列以使用ShowAllData
清除过滤器并重新隐藏以前隐藏的列。
Dim TH()
ReDim TH(ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column)
For j = LBound(TH) + 1 To UBound(TH)
TH(j) = ActiveSheet.Columns(j).EntireColumn.Hidden
ActiveSheet.Columns(j).EntireColumn.Hidden = False
Next j
ActiveSheet.ShowAllData
For j = LBound(TH) + 1 To UBound(TH)
ActiveSheet.Columns(j).EntireColumn.Hidden = TH(j)
Next j
如果您需要更改自动过滤模式:
Activesheet.AutoFilterMode = False
Activesheet.AutoFilterMode = True
但这很容易在工作表中生成有关该模式当前状态的错误。 (如果它已经处于你试图设置的状态,那么excel不喜欢那样......)
答案 2 :(得分:-1)
以数组格式给出Criterial
例如:Criterial:= Array(">0")
ActiveSheet.Range(“someRange”)。AutoFilter Field:= 27,Criteria1:= Array(“test”)