Excel VBA – worksheet.calculate不计算我所有的公式

Private Sub Worksheet_Activate() If Worksheets("Input").Range("S5").Value = "Yes" Then MsgBox "Please make sure you've completed the historical deductible amounts for EL" End If Worksheets("Input").Calculate Worksheets("EL").Calculate Worksheets("PPL").Calculate Worksheets("Auto").Calculate Worksheets("AL").Calculate Worksheets("APD").Calculate Worksheets("Loss Layering").Calculate Worksheets("Sheet2").Calculate Worksheets("Premium").Calculate End Sub 

为了加速一个非常大的工作簿,我已经closures了自动计算,并创build了一个层次结构,在我移动工作簿时计算表单。 我的问题是,如sumifsumproduct任何重型公式,这些值是不计算在我的活动工作表内,他们保持为零。 我已经尝试过application.calculate和CalculateFull ,这两个工作,但我觉得他们占用太多的时间。 我试图find一种方法来做到这一点,同时保持我的模板尽可能快速,简单和用户友好。 有什么build议么?

目前还不清楚哪个工作表是活动工作表,并包含这个代码,但是我可以想象出2个可能的原因。

1)您尚未在活动工作表上调用worksheet.calculate。
2)由于worksheet.calculate忽略了对其他工作表的依赖关系,所以您正在使用的计算顺序将只按照您的需要工作,如果工作表上的公式始终引用已经计算的其他工作表。 换句话说,纸张计算顺序必须与纸张间参考顺序完全匹配,并且不得有任何正向纸张间参考(包括定义的名称等)。

作为一般的观点,我通常不希望使用worksheet.calculate来计算整个工作簿会比使用Application.Calculate(虽然我相信有时会更快)

我知道这已经有一段时间了,但是一直在困扰着我,我刚刚提出了一个解决方法。 我创build了一个我想要强制计算范围时调用的子。

 Sub forceRngCalc(rng As Range) For Each c In rng formulaToCopy = c.Formula c.ClearContents c.Value = formulaToCopy Next End Sub 

这相当于重新input公式,因此力量重新计算。 这不是很花哨,但它的作品。