添加子例程会影响所有其他子例程的性能

时间:2018-08-23 18:32:08

标签: excel vba subroutine

我有一个工作簿,其中包含三个模块,总共约19,000行代码。

我添加了多个按钮来运行性能出色的子例程。

我添加了四个新的子例程(都非常短,总共可能有200行)来复制/粘贴数据并构建图形。

一旦我添加了这些子例程,所有其他子例程都开始运行异常缓慢(从5-10秒到几分钟,并且完全冻结了Excel)。

我有一个解决方法(每次运行例程时都关闭并打开“自动计算”),但是我试图理解为什么这是一个问题。

Excel可以保留的子例程数量是否受到限制,或者这可能是由完全独立的问题引起的?

1 个答案:

答案 0 :(得分:0)

显然,每次子程序运行时,Excel都会尝试更新整个工作簿。新子例程的添加使它超出了一些看不见和未知的限制(至少对我来说是看不见和未知的)。这似乎可以解决它:

我将这三行添加到每个子例程的开头:

Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

然后我将这些行添加到每个子例程的末尾:

Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

这可以防止Excel尝试不必要的更新。它解决了问题,但没有解释为什么最后三个子例程将其推到了极限。