【发布时间】:2015-02-23 09:01:43
【问题描述】:
我的问题有点宽泛,但我觉得这个问题非常有趣。
有时我必须使用 VBA 代码在 Excel 工作表中创建/清除 cmets,例如:
Range(someRange).ClearComments
或
.Comment.Shape.Width = 200
与我的代码中的其他复杂计算相比,这些操作花费了大量的时间(例如每个操作 1 秒)。
每次执行代码时,我都会关闭automaticCalculations、screenUpdating 和EnableEvents 关闭,但这似乎并没有太大的区别。
关于如何加快这些行动的任何想法?
执行这些耗时的命令时,excel 做了什么?
编辑: 该宏在包含大量数据(100x40,000 个单元格)的工作表上运行。 然而,执行只需要该数据的一小部分。 我认为仅在同一数据部分上执行,带到新工作表上的速度要快得多。
【问题讨论】:
-
我的测试:删除、创建和设置 100k cmets 的宽度 - 不到 14 秒,因此您的工作表或代码可能存在问题。
-
让我们看看代码,完整的代码
-
我怀疑我的代码是否有助于解决问题。在这里提供帮助太长了。然而,我发现问题发生在我使用大(40,000 行,100 列)过滤范围时。当我将相同的操作范围切割到另一张纸上时,它的执行速度要快得多....
-
正如其他人所指出的,您应该至少提供一个您正在使用的代码示例。听起来您有问题,而不是 VBA 自己处理 cmets 的方式。我看不出 Excel 每次需要一秒钟来处理 cmets 的任何理由。
-
像这样在大范围内循环肯定会导致性能问题。