Excel自动filter与客户端断开连接

在我的Excel电子表格中,我有一个数据表设置

我也有两个button

一个将第四列过滤为大于0的任何值

With ActiveSheet .Range("A138:H246").Select Selection.AutoFilter Field:=4, Criteria1:=">0", Operator:=xlAnd End With 

另一个(应该是)删除filter

 With ActiveSheet .Range("A138:H246").Select Selection.AutoFilter Field:=4 End With 

但是,删除filter的button不起作用,我不断收到以下消息

“被调用的对象已经从客户端自动filter断开”

我已经尝试录制一个macros,然后使用该代码,但即使是失败,如果我按下button上运行的代码

有任何想法吗?

我build议你在完成过滤数据的时候使用下面的语句。

希望这可以帮助?

 Activesheet.AutoFilterMode = false 

正如你所说,如果自动filter在尝试使其为false时自动filter已经为假,但是如果将此行放在代码中正确的位置,则filter将始终为真,并将其设置为false。 如下

 ActiveSheet.Range("someRange").AutoFilter Field:=27, Criteria1:="test" ' do something with filtered data ActiveSheet.AutoFilterMode = False 

这对我来说没有任何错误

我说这应该是这样简单的:

 ActiveSheet.ShowAllData 

它只是清除所有filter,但它不会停用AutoFilter模式,这是否足够?

这里是代码来扫描所有使用的列,并在显示所有使用ShowAllData清除filter和重新隐藏以前隐藏的列之前存储隐藏状态。

 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 

如果您需要更改AutoFilter模式:

 Activesheet.AutoFilterMode = False Activesheet.AutoFilterMode = True 

但是,这可能会很容易地在您的工作表中产生关于该模式的当前状态的错误。 (如果它已经处于你想要设置的状态,那么excel就不会那样…)