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

标签 vba excel 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 之间的关系。

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

最佳答案

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

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。你把复选标记放在里面,你把复选标记去掉......)
  • 如果您有任何表单按钮/对象,请删除它们并查看它是否更快。

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

    关于vba - AdvancedFilter 宏在 AutoFilter 关闭时运行速度较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38488273/

    相关文章:

    Excel VBA 检查数据的自动筛选

    excel - 超链接点击运行功能两次并给出补丁错误

    arrays - 将单独的范围放入二维数组中

    PHP CSV 文件生成,如何更改 csv 列宽

    excel - Worksheet_FollowHyperlink 和 MsgBox 在 Excel 2010 中不起作用

    vba - 在保留自动筛选设置的同时清除单元格?

    excel - ThisWorkbook.save 预期的函数或变量

    mysql - DAO OpendataBase(DSN 对话框始终打开)

    Excel - 从一列水平返回一行中的多个匹配值

    vba - 除了漏斗图标之外,是否有其他方法可以查看 Excel 中哪些筛选器处于事件状态?