我找到的最接近的答案是使用宏来手动计算工作簿中的所有工作表,但这在我的情况下不起作用,因为所有工作表都是相互关联的并相互馈送(工作簿)包括许多有意的迭代计算)。
基本上我需要一个宏来同时计算所有的工作表,经过几个小时的搜索后,我还没有在互联网上的任何地方找到解决这个问题的方法。有人有什么想法吗?
答案 0 :(得分:0)
Calculate
的唯一选项是范围,工作表或应用程序。您无法通过Workbook.Worksheets.Calculate
计算多个工作表的集合,也无法使用数组ThisWorkbook.Worksheets(SheetListArray).Calculate
计算。
如果计算每个工作表,则您的方案将取决于哪些工作表相互引用。如果它是线性关系(A> B> C> D),那么您只需按正确的顺序调用每个工作表一次。
如果不同的列引用不同的纸张(A> B> C> D> A),则计算变得更复杂(例如,A> D> A> B> C> ; B> C> D> A> B> C> B> C> D> A 可能获取所有内容,具体取决于计算深度的层数)
如果您知道完全哪些范围引用其他工作表,那么您(理论上)可以按正确的顺序刷新它们。 (A!1:1> D!3:4> A!2:2> D> A> B> C 6:6> B!9:18> C> D> ; A> B> C> D)
即使使用Application.CalculationState
也无济于事 - 请测试以下两张图片:
<强> Sheet 1中强>
A1:0
A2:= Sheet2!A1 / 2
A3:= Sheet2!A2 / 2
~~~~
的 Sheet 2中强>
A1:= Sheet1!A1 * 2
A2:= Sheet1!A2 * 2
现在,将Sheet1!A1
更改为1
,然后运行Sheet1.Calculate: Sheet2.Calculate:
- 您会看到1
填充表单,但即使它到达底部(所有计算完成!)Application.CalculationState
仍为xlPending
(状态栏显示&#34;计算&#34;)
这会阻止我们使用循环While Application.CalculationState=xlPending