使用VBA清除工作表上的所有过滤器时速度极慢

时间:2013-04-04 09:22:19

标签: excel-vba excel-2010 autofilter vba excel

我不明白为什么要花这么长时间才能完成,奇怪的是它花了很多时间来执行“ActiveSheet.ShowAllData”。任何人都可以提出可以改善它的建议吗?

Sub ClearAllFilters()
  Application.Calculation = xlManual
  Application.ScreenUpdating = False
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData

For Each OleObj In ActiveSheet.OLEObjects
    If OleObj.progID = "Forms.CheckBox.1" Then
        OleObj.Object = False
    End If
    Next

Sheets("Manhour Summary Current Month").TextBox1.Text = ""
Sheets("Manhour Summary Current Month").TextBox2.Text = ""
Sheets("Manhour Summary Current Month").TextBox3.Text = ""

ActiveSheet.Range("$A$6:$H$1307").AutoFilter Field:=8, Criteria1:="<>0"

     End If
Application.Calculation = xlAutomatic
  Application.ScreenUpdating = True
End Sub

基本上我正在清除所有自动过滤器,清除复选框并清除三个文本框。 这是大约1000行的数据,所以我没想过会这么多!

谢谢!


问题在于应用于大多数单元格的条件格式。我很惊讶自动过滤器和条件格式化是一个很大的问题。

非常感谢你的帮助!我的脑袋现在感觉好多了....

1 个答案:

答案 0 :(得分:0)

我更喜欢使用ActiveSheet.AutoFilterMode = False,我很想知道这是否有所改善。

增加了表现潜力:

  1. 如果有机会,你的公式是理想的,因为你有这么多。

  2. 如果这些是必需的,但您可以根据要求更新,比如说更新时间,那么我学到的一个技巧是将第一行保留为公式,但将其余部分展平,并在更新数据时再复制这些公式向下,更新值,然后再次展平除第一行以外的所有行。

  3. 上述方法的替代方法是创建一个更新这些值的过程,并在需要时运行并且根本没有公式。

  4. 发布条件格式问题:

    1. 作为一种由于条件格式化而改进的方法,您可以让表格在通过VBA更新数据后更改单元格格式。每次过滤时,这都会减少excel。

    2. 根据您的情况,也可能我最喜欢的是让您的日期显示当天,例如Sat 2-Mar-13。这仍然可以快速检查周末并提高性能。