Excel / VBA模型在多次运行中减慢速度

时间:2014-02-26 13:56:59

标签: excel vba excel-vba optimization

我有一个基于excel的模型,我正用于我的论文。为了加快速度,我已经对原版进行了相当多的修改,但我现在只是放弃优化它。该模型打开excel工作簿并复制数据并关闭它们等。

我正在尝试使用此模型进行大约1000-2000次模拟,但模型运行所需的时间从最初几次运行的大约60秒到大约60次运行后超过100秒。如果我关闭并重新打开excel,那么时间会再次下降。我已经阅读了优化VBA代码并尝试尽可能多地实现。我已经投入了

Application.CutCopyMode = False
每次循环结束时

每次清除剪贴板。然后,我试图通过像

这样的东西绕过剪贴板
Workbooks("Master").Range().value = Workbooks("Module").Range().value
而不是复制和粘贴。然而所有这些似乎对我的模型的运行影响不大,而模型的运行速度仍然越来越慢。

关于我接下来可以尝试的任何想法?

=========编辑===================

以下是代码的两个粘贴代码:

Master Spreadsheet具有逐步执行并运行每个模块的代码

SubCatchment Module是由主

运行的示例模块

1 个答案:

答案 0 :(得分:1)

副手,这是我看到的问题:

  1. 您使用的是Activate和Select方法,这些方法既慢又不可靠,

  2. 工作簿在打开或激活时可能会运行自己的代码,

  3. 你没有禁用计算,这既缓慢又容易导致你看到的具有非常复杂的交叉链接计算的工作簿的那种“失控运行时”

  4. 您正在为打开/激活/执行的工作簿使用可能不一致的字符串名称而不是每个工作簿的单个工作簿变量,这使得它们不确定是否会在它们应该关闭时完成,并且

    < / LI>
  5. 您没有错误处理或检测,但是您在各个地方都禁用错误报告,因此如果在循环过程中出现任何问题,您就无法了解错误。

  6. 这一切都是乍一看。当所有这些问题都是开放的并且它们本身足以解释任何问题时,我不倾向于花更多时间深入研究。