AdvancedFiltermacros在AutoFilterclosures的情况下运行速度较慢

我一直在试图理解一个同事在网上find的一个macros,用于根据选定的标准过滤一组数据。 部分代码是一个IF语句,检查AutoFilterMode是否closures,如果发现它closures,则将其切换,如此

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

紧接着的一行使用.AdvancedFilter根据选定的标准过滤数据(一个范围称为filter)

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

我相对强迫症是想把事情清理干净,所以我想我会摆脱第一个陈述,因为这似乎没有必要。 自从消除它之后,我发现,如果第一条语句被消除,过滤过程将花费更长的时间。

我在网上search高低,但一直没能find什么之间的关系AutoFilter和AdvancedFilter是。

所以我的问题是这样的:为什么AdvancedFilter需要这么长的时间才能运行,而不是第一次打开AutoFilter?

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

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

正如我所说,我认为是在那里,并没有解决它,所以说…通常,与自动filter和先进的filter的怪异,这是与数据的东西。 所以当我需要调整工作表时,我经历了很多事情。 你尝试过所有这些吗?

首先,创build一个新的工作簿,复制旧的工作簿中的所有数据,并将值粘贴到新的工作簿。 保持尽可能最小,因为你仍然可以使用这个macros。 IE浏览器:如果有button,这样你不需要转移,不要。 如果有多余的纸张不需要,请不要传送它们。 如果你可以做价值而不是公式,只做价值。 但是转移整个相关的数据集,而不仅仅是一些样本行,以便尽可能苹果苹果。

如果它仍然像这样慢下来,那么我们肯定是在看代码的一些奇怪的情况,它可能是caching的东西像litelite提出的。 如果它的工作更像你所期望的那么我们知道这是一个格式化的东西或其他一些东西搞乱它。

假设第二个开始,因为这通常是问题。 尝试每个这些原始数据并重新运行它。 任何订单的工作,无论哪个最容易开始。 我通常在每次更改之后重新运行macros,并且在再次运行之前不要执行所有这些操作,以便我可以知道哪些内容修复了它。 而且,由于我不知道你的数据,所有这些都不一定适用。 忽略他们,如果他们不适用。 首先做一个副本,并做这些副本。 如果您通过倍数并find修复,再次复制原件,然后只应用最后一个更改到副本,看看它是否仍然修复它。

如果您有多个工作表,请复印并删除所有额外的工作表。 只使用最less量的纸张进行testing。 同样,如果您剩下多张纸,则需要对它们全部进行以下各项操作:

  • 复制所有非公式数据,并粘贴特殊/值,以摆脱任何奇怪的格式/等。
  • 取消隐藏所有行。
  • 删除所有评论。
  • 删除所有条件格式。
  • select全部,打开包装文本,然后closures包装文本。 (我把这个叫做微软Hokey-Pokey,你把复选标记放进去,把你的复选标记拿出来…)
  • 如果你有任何forms的button/对象删除它们,看看它是否更快。

最后,你在数据集中处理了多less行数据?