0

我这里有这个模块,它是 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
4

1 回答 1

1

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

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

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

于 2013-01-16T22:59:07.960 回答