2013-04-04 33 views
1

我不明白为什么这需要花费很长时间才能完成,奇怪的是,执行“ActiveSheet.ShowAllData”需要最多的时间。任何人都可以提出什么可以改善它?使用VBA清除表单上的所有过滤器时极其缓慢

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行的数据,所以没有什么太多,我会想!

谢谢!


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

海量感谢您的帮助!我的头现在感觉好多了......

+0

因为您在这里做4(3)不同的事情debug.print每个操作的时间戳,并告诉我们哪一个需要最多的时间来执行。 – 2013-04-04 09:52:55

+0

或On Error Resume Next ActiveSheet.ShowAllData On Error转到0 – 2013-04-04 09:58:00

+0

或者删除过滤器并重新放回来,看看需要多少时间... – 2013-04-04 11:02:21

回答

0

我更喜欢用ActiveSheet.AutoFilterMode = False,我很想看看这是否会改善。

增加的性能潜力:

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

  2. 如果这些都是必需的,但你可以根据请求更新,比如说更新时间,那么我学到的一个技巧就是将第一行保留为公式,但将其余的平坦化,当数据更新时将这些公式下来,更新值,然后重新展平除第一行以外的所有行。

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

帖子条件格式问题:

  1. 作为改善由于条件格式一旦数据已经通过VBA更新,而不是你可以有片状的改变单元格的格式的方式。这会减少excel每次过滤时都这样做。

  2. 此外,也可能是我的最爱由于你的情况是让你的日期显示的一天,说Sat 2-Mar-13。这仍然可以对周末进行快速检查并改善性能。

+0

这真的很让人沮丧,在我第一次打开电子表格时,它似乎运行得很快,从此它永远都是这样。 – Matteous 2013-04-05 01:14:49

+0

刚刚尝试过那么有趣 - 做了一个粘贴值和那里没有任何改进,因为我在一个单独的选项卡上使用了完全相同的过滤器和搜索功能,总结了时间表注释(〜32k单元,也使用IF,VLOOKUP和OFFSET公式),并且它运行完美!即时结果!可能会出现什么问题?我花了这么长时间才明白这一点,他们热衷于使用它,但我不能解决这些问题。 再次感谢:) – Matteous 2013-04-05 06:58:43

+0

听起来像是愚蠢的问题,但在这张表有什么不同?就像在同一时间打开每个单元更改或另一个工作簿时执行的代码一样?此外,这并不理想,但如果从另一张纸或工作簿上进行基本粗略的尝试以消除其他因素,重新开始呢?就像我说的,不理想。什么问题。 :'( – glh 2013-04-05 07:54:58