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



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

但是,删除过滤器的按钮不起作用,我不断收到以下消息

"调用的对象已与其客户端自动筛选断开连接"

我尝试录制宏然后使用该代码,但如果我在按下按钮时运行代码,即使失败

有什么想法吗?

我建议您在完成过滤数据后使用以下语句。

希望这有帮助吗?

Activesheet.AutoFilterMode = false 

正如您所说,如果您尝试将其设为 false,如果自动过滤已经为 false,这可能会产生错误,但是如果您在代码中将此行放置在正确的位置,则当您想要将其设置为 false 时,过滤器将始终为 true。 如下

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

这对我来说没有错误...

我的说它应该像这样简单:

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 不喜欢这样......

最新更新