Excel在自动筛选器上断开与客户端的连接

时间:2015-04-09 09:32:28

标签: excel vba excel-vba

在我的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"

断开连接

我已经尝试过录制宏然后使用该代码但是如果按下按钮按下代码就会失败

有什么想法吗?

3 个答案:

答案 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”)