SheetCalculate - 此子例程如何运行?

时间:2013-01-16 14:57:38

标签: excel vba excel-vba

我这里有这个模块,它是Workbook子程序。我不能为我的生活理解GenerateLimitSummary如何能够运行?有人可以在这里阐明流程吗?

Private LimitBool As Boolean

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

    If LimitBool Then Exit Sub

    ' use conditional formatting to highlight limit breaches
    ApplyConditionalFormatting

    ' regenerate the summary limits sheet
    LimitBool = True
    GenerateLimitSummary
    LimitBool = False

End Sub

1 个答案:

答案 0 :(得分:1)

作者使用LimitBool来防止无限循环/堆栈溢出:

  • 最初,LimitBoolFalse,因此执行Workbook_SheetCalculate的剩余部分
  • 现在,LimitBool设置为True(确认后不是True
  • GenerateLimitSummary已执行。如果此例程由于某些原因迫使工作簿重新计算,则会再次触发Workbook_SheetCalculate。但是,由于LimitBool现在为True *,因此第一次检查后,第二次调用此过程现已退出。如果它没有这个检查,它会再次调用GenerateLimitSummary,然后触发重新计算等...
  • GenerateLimitSummary运行后,LimitBool被设置回False,因此可以再次运行

(*) - 它有一个模块范围的范围,即它在不同的调用中保持它的值,而一个过程范围的范围(= sub中的Dimmed)将为每个调用创建一个新的变量