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