确保在运行VBA代码时刷新Excel计算

确保在运行VBA代码时刷新Excel计算,excel,vba,Excel,Vba,我正在运行一个简单的宏,将应用程序.Calculation设置为xlCalculationManual。在循环(数千次迭代)中,宏: 将迭代的输入写入工作表中的单元格 运行工作表。计算方法 获取工作表上公式返回的值 将这些值写入其他工作表 我一直假设工作表。Calculate保证公式返回的值是最新的 但最近的一些调试表明,情况可能并非如此 我在研究时发现了这些: 但他们已经几岁了,我想知道是否还有什么新的建议 人们是否建议在运行代码之前将应用程序。CalculationTerruptKe

我正在运行一个简单的宏,将
应用程序.Calculation
设置为
xlCalculationManual
。在循环(数千次迭代)中,宏:

  • 将迭代的输入写入工作表中的单元格
  • 运行
    工作表。计算
    方法
  • 获取工作表上公式返回的值
  • 将这些值写入其他工作表
我一直假设
工作表。Calculate
保证公式返回的值是最新的

但最近的一些调试表明,情况可能并非如此

我在研究时发现了这些:


但他们已经几岁了,我想知道是否还有什么新的建议

人们是否建议在运行代码之前将
应用程序。CalculationTerruptKey
设置为
xlNoKey
(或设置为
xlEscKey
),然后在完成后将其返回到原始值

或者将
工作表.Calculate
放在while循环中,该循环检查
应用程序.CalculationState=xlDone

还是其他方法

我是否应该考虑到任何细微差别或不良副作用(我最近使用了
DoEvents
来帮助解决问题,但它最终导致了其他问题,因此希望避免类似的情况)

谢谢大家


Jim

工作表中的“将输入写入单元格”部分可能是在逐个单元格的基础上运行的?您是否考虑过将输入转储到2D变量数组中,并在每次迭代时写入工作表一次?我不知道这是否已经改变,但我在过去十年中遇到了足够多的意外计算行为问题,因此我有一种知己的感觉,那就是你不应该仅仅依赖于它在今天的工作情况比写这篇文章时更好。我绝对推荐使用calculationState循环,但对其进行一些低限制,因为我见过许多大型excel工作簿进入永久recalc,即使没有循环引用。