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

Posted

技术标签:

【中文标题】AdvancedFilter 宏在 AutoFilter 关闭时运行速度较慢【英文标题】:AdvancedFilter macro runs slower with AutoFilter off 【发布时间】:2016-07-20 18:33:13 【问题描述】:

我一直在尝试了解同事在网上某处找到的宏,用于根据所选条件过滤一组数据。部分代码是一个 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 之间的关系。

所以我的问题是:为什么在未首次打开 AutoFilter 时 AdvancedFilter 需要这么长时间才能运行?

【问题讨论】:

也许,只是也许,当Autofilter 打开时,Excel 会保留某种缓存,然后 AdvancedFilter 使用该缓存。 【参考方案1】:

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

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 提出的。如果它更像您所期望的那样工作,那么我们知道它要么是格式化的东西,要么是其他东西弄乱了它。

假设第二个开始,因为这通常是问题所在。 在原始数据上尝试每一个并重新运行它。任何订单都有效,因此以最容易开始的为准。我通常在每次更改后重新运行宏,并且在再次运行之前不会执行所有这些操作,这样我就可以知道是哪个东西修复了它。此外,并非所有这些都一定适用,因为我不知道您的数据。如果它们不适用,请忽略它们。 首先制作一个副本并对副本执行这些操作。如果您检查了多个并找到了修复,请再次制作原始副本,然后仅将最后一次更改应用于副本,看看它是否仍然修复它。

如果您有多张工作表,请制作一份副本并删除所有多余的工作表。仅在您可以使用的最少量纸张上进行测试。同样,如果您还有多张纸,则需要对所有纸进行以下操作:

复制所有非公式数据并粘贴特殊/值以删除任何 奇怪的格式/等。 取消隐藏所有行。 删除所有 cmets。 删除所有条件格式。 全选,打开自动换行,然后关闭自动换行。 (我称之为 Microsoft Hokey-Pokey。你把复选标记放在里面,你把复选标记去掉......) 如果您有任何表单按钮/对象,请将其删除,看看是否更快。

最后,您在数据集中处理了多少行数据?

【讨论】:

以上是关于AdvancedFilter 宏在 AutoFilter 关闭时运行速度较慢的主要内容,如果未能解决你的问题,请参考以下文章

宏在 Notepad++ 中没有按预期工作

用户使用宏在excel中插入图片

如何使用宏在 C++ 中生成随机变量名称?

使用宏在 excel 中分配和检索 excel cellValues

根据 Excel 使用宏在 Word 中创建条件格式

使用 VBA 宏在 Word 中水平对齐(分布)图像