【问题标题】:Excel/VBA Model slows down over multiple runsExcel/VBA 模型在多次运行时变慢
【发布时间】:2014-02-26 23:20:54
【问题描述】:

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

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

Application.CutCopyMode = False

在每次循环结束时清除剪贴板。从那以后,我试图通过诸如

之类的方式绕过剪贴板
Workbooks("Master").Range().value = Workbooks("Module").Range().value

而不是复制和粘贴。然而,所有这些似乎对我的模型的运行几乎没有影响,我的模型仍然越来越慢。

关于下一步我可以尝试什么的任何想法?

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

这是代码的两个粘贴箱:

Master Spreadsheet 具有单步执行和运行每个模块的代码

SubCatchment Module 是一个由 master 运行的示例模块

【问题讨论】:

  • 请发布您的代码
  • 我们需要查看更多代码。
  • 我不知道要发布什么代码。许多模块和工作簿中有很多内容
  • 要么做一些测试以找出哪部分代码运行缓慢,要么将您的文档上传到某处并发布链接。

标签: vba excel optimization


【解决方案1】:

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

  1. 您正在使用 Activate 和 Select 方法,它们既慢又不可靠,

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

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

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

  5. 您没有错误处理或检测,但您在各个地方禁用错误报告,因此您无法真正了解循环过程中是否有任何问题。

乍一看,这就是全部。当所有这些问题都是公开的并且本身足以解释任何数量的问题时,我不倾向于花更多的时间进行更深入的研究。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多