【问题标题】:Excel disconnects from clients on autofilterExcel 在自动筛选器上断开与客户端的连接
【发布时间】:2018-03-31 21:03:49
【问题描述】:

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

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

“被调用的对象已经从它的客户端自动过滤器中断开了”

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

有什么想法吗?

【问题讨论】:

  • 即使将代码更改为 'Field:=4, Criteria1:="

标签: vba excel


【解决方案1】:

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

希望这有帮助吗?

Activesheet.AutoFilterMode = false 

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

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

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

【讨论】:

  • 很遗憾,这不起作用,它崩溃并显示一条错误消息,提示内存不足?
  • 正如我在回答中解释的那样,这很容易在您的工作表中生成有关该模式当前状态的错误。 (如果它已经处于您尝试设置的状态,excel不喜欢那样......)
【解决方案2】:

我说应该这么简单:

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

【讨论】:

  • 如果我使用 ShowAllData 我收到错误消息“Worksheet 类的 ShowAllData 方法失败”我需要隐藏工作表的其他列所以我认为这个函数不是一个可行的选项
  • 好的,所以我添加了一段可以帮助您的代码,请告诉我是否足够
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 2013-03-31
  • 1970-01-01
  • 2010-11-01
  • 2013-06-22
相关资源
最近更新 更多