有没有办法在许多打开的工作簿中手动计算一个工作簿(包括许多工作表和迭代计算)?

时间:2018-03-12 13:03:58

标签: excel excel-vba vba

我找到的最接近的答案是使用宏来手动计算工作簿中的所有工作表,但这在我的情况下不起作用,因为所有工作表都是相互关联的并相互馈送(工作簿)包括许多有意的迭代计算)。

基本上我需要一个宏来同时计算所有的工作表,经过几个小时的搜索后,我还没有在互联网上的任何地方找到解决这个问题的方法。有人有什么想法吗?

1 个答案:

答案 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