关闭AutoFilter时,AdvancedFilter宏运行速度较慢

时间:2016-07-20 18:33:14

标签: excel vba excel-vba autofilter

我一直在努力了解一位同事在网上找到的用于根据所选标准过滤一组数据的宏。部分代码是一个IF语句,检查AutoFilterMode是否关闭,然后如果发现它关闭则将其切换为开启,

'Turn on filter if not already turned on
If Sheets("ORDER DATA").AutoFilterMode = False Then rng.AutoFilter

下一行使用.AdvancedFilter根据所选条件(称为过滤器的范围)过滤数据

rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=filter, Unique:=True

我是相对强迫症想要在我的代码中清理东西,所以我想我已经摆脱了第一个声明,因为它似乎没有必要。自从消除它以来我发现的是,如果消除了第一个语句,过滤过程需要更长的时间才能运行。

我在线搜索高低,但无法找到AutoFilter和AdvancedFilter之间的关系。

所以我的问题是:为什么AdvancedFilter在首次启用AutoFilter时需要花费更长时间才能运行?

1 个答案:

答案 0 :(得分:0)

首先,我假设你在代码的顶部有这个?如果没有,请添加它,看看是否修复了它。不要忘记在底部有重置选项。

With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .EnableEvents = False
End With
'your code goes here
With Application
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
    .EnableEvents = True
End With

正如我所说,我认为那是在那里并且没有解决它,所以说...通常,使用自动过滤器和高级过滤器的怪异,它与数据有关。因此,当我需要调整工作表时,我会遇到很多事情。你试过这些吗?

首先,创建一个新工作簿,将所有数据复制到旧工作簿中,并仅将值粘贴到新工作簿中。尽可能保持最小化,以便您仍然使用该宏。 IE:如果有按钮,你不需要转移,不要。如果有不需要的额外纸张,请不要转移它们。如果您可以使用值而不是公式,则仅执行值。但是,确实转移整个相关数据集而不仅仅是一些样本行,以便尽可能地使用苹果到苹果。

如果它仍然像那样运行缓慢,那么我们肯定会在代码中看到一些奇怪的情况,它可能就像litelite提出的缓存一样。如果它的工作方式与您期望的更相似,那么我们就知道它要么是格式化的东西,要么是其他一些搞乱它的东西。

假设第二个开始,因为这通常是问题。 在原始数据上尝试其中的每一个并重新运行它。任何订单都以最容易开始的方式运作。我经常在每次更改后重新运行宏,并且在再次运行之前不要完成所有这些操作,这样我就可以知道修复了哪些内容。此外,并非所有这些都必然适用,因为我不知道您的数据。如果他们不申请,请忽略他们。 首先制作副本并将其复制到副本中。如果您经历了倍数并找到了修复程序,请再次制作原件的副本,然后仅对该副本应用最后一个更改,并查看它是否仍然可以修复它。

如果您有多张纸,请复印并删除所有额外的纸张。只需要您可以使用的最小数量的纸张进行测试。同样,如果剩下多张纸,则需要对所有纸张进行以下各项操作:

  • 复制所有非公式数据并粘贴特殊/值以删除任何 奇怪的格式/等。
  • 取消隐藏所有行。
  • 删除所有评论。
  • 删除所有条件格式。
  • 选择全部,打开换行文本,然后关闭换行文本。 (我称之为Microsoft Hokey-Pokey。你把复选标记放入,你拿出勾选标记......)
  • 如果您有任何表单按钮/对象,请删除它们并查看它是否更快。

最后,您在数据集中使用了多少行数据?