【问题标题】:Excel VBA - worksheet.calculate doesn't calculate all of my formulasExcel VBA - worksheet.calculate 不计算我的所有公式
【发布时间】:2014-09-05 13:42:50
【问题描述】:
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

为了加快一个非常大的工作簿的速度,我关闭了自动计算并创建了一个层次结构,当我在工作簿中移动时,我可以在其中计算工作表。我的问题是,对于任何重型公式,例如 sumifsumproduct,这些值不会在我的活动工作表中计算,它们保持为零。我已经尝试过 application.calculate 和 CalculateFull,它们都有效,但我发现它们占用了太多时间。我试图找到一种方法来做到这一点,同时让我的模板尽可能快速、简单和用户友好。有什么建议吗?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    目前尚不清楚哪个工作表是活动工作表并包含此代码,但我可以想到 2 个可能的原因导致您的问题。

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

    一般来说,我通常不会期望使用 worksheet.calculate 来计算整个工作簿会比使用 Application.Calculate 更快(尽管我确信有时它会更快)

    【讨论】:

    • 很抱歉这种模棱两可;这张表是“Premium”,我仔细检查了我的计算顺序,一切都是正确的。关于你的一般观点,我有两张计算特别繁重的工作表,在我的活动工作表中不需要,所以 worksheet.calculate 比 application.calculate 快得多 - 大约 11 秒
    • 所以使用 worksheet.enablecalculation=false 关闭 2 张厚纸,然后使用 Application.calculate
    • 事实证明,我实际上遗漏了一张我的依赖表,这并不是很明显,因为它隐藏在涉及名称的计算中。在我的工作簿中搜索了好几个小时,我找到了它。非常感谢!!
    【解决方案2】:

    我知道这已经有一段时间了,但它一直困扰着我一段时间,我刚刚想出了一个解决方法。我创建了一个子程序,当我想在某个范围内强制计算时调用它。

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

    这相当于重新输入公式并因此强制重新计算。这不是很花哨,但它确实有效。

    【讨论】:

      【解决方案3】:
      ''simple solution, example:
      

      调用重新计算(Sheet3.[A10:G10])

      结束子 子重新计算(rng 作为范围) rng.value = rng.公式 结束子

      【讨论】:

      • 您应该了解如何使用正确格式编写答案一次。
      猜你喜欢
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多