【问题标题】:Excel - Stop Calculation on Opening to prevent circular referenceExcel - 在打开时停止计算以防止循环引用
【发布时间】:2014-07-02 15:36:46
【问题描述】:

我有一个包含大量内置循环引用的大型电子表格。我已经内置了 VBA 代码以在打开时设置为手动和迭代计算,并在设置为迭代计算后强制在工作簿打开时进行计算。但是,似乎工作簿在打开时甚至在运行此 VBA 代码之前就尝试计算,因此,如果工作簿已设置为没有迭代计算的自动计算,它会运行工作簿,然后由于循环引用而崩溃。

我知道我可以将自己的应用程序设置设置为始终进行迭代计算,但是此工作簿与可能没有相同应用程序设置的其他人共享。有没有办法在打开时停止计算,直到代码将应用程序设置为迭代计算。

谢谢。

【问题讨论】:

  • 发布工作簿打开时运行的代码。

标签: vba excel


【解决方案1】:

在一个空白的 .xlsm 文件中,在工作簿打开事件中,输入此代码

   Private Sub Workbook_Open()
       Application.calculation = xlCalculationManual
       ' Add code to open the real workbook
       ' ---------
   End Sub

由于计算将由最后打开的工作簿是手动还是自动驱动,因此必须将上述代码放入调用者工作簿中(如上所示)。此调用者工作簿在打开时会先禁用计算,然后拉起您的工作簿,保证具有手动计算模式。

此外,在所需的工作簿(具有循环引用的工作簿)中,OnOpen 事件应触发调用方工作簿的关闭而不保存。

这样流程对用户是透明的,他/她只打开 Caller book。

【讨论】:

  • HNK,感谢您的反馈。但是,我的工作簿中已经有了该代码。问题似乎是,如果应用程序在打开工作簿之前已经设置为自动,它甚至会在到达 VBA 代码以将计算设置更改为手动之前开始重新计算所有内容 - 任何方式来更改它以便它不会'打开文件后不立即计算?
  • 顺便说一句,使用循环引用几乎总是一个非常糟糕的主意,并且可能导致非常难以调试的问题
  • HNK,我明白你在说什么,这绝对是在正确的轨道上。该解决方案是否要求最终用户位于保存所需工作簿的同一网络上?我的意图(不理想,但事情的完成方式)是文件通过电子邮件共享,因为有更新,所以我试图思考如何通过电子邮件共享呼叫者工作簿,并且仍然能够打开所需的工作簿,而无需发送两个单独的文件。对不起我的无知,但这对我很有帮助!
  • 不是真的,我的意思是您需要指定被调用(您的)工作簿的路径。调用者工作簿可以在任何地方。被调用的工作簿需要位于“可找到”的位置...也可以是共享的网络驱动器
  • 如果这个答案对您有帮助,那么您可以投票/将其标记为已回答。 tks
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多