【问题标题】:Behaviour of Worksheet_Calculate event in Excel – stored events?Excel 中 Worksheet_Calculate 事件的行为 - 存储的事件?
【发布时间】:2011-05-11 10:55:36
【问题描述】:

感谢您阅读我的帖子。我遇到了一个奇怪的(在我看来)行为 Excel 中的 Worksheet_Calculate 事件(Windows 7 Ultimate,Excel 2010),让我通过给你一个设置来描述我遇到的问题。

使用 2 张工作簿。 Sheet 2 单元格 A1 有一个公式 =Sheet1!A1,Sheet2 的 EnableCalculation 属性设置为 TRUE 并且在 Sheet2 对象中有一个 Sub

Private Sub Worksheet_Calculate()
    i = MsgBox("Value " & Me.Range("A1").Value, vbOKOnly)
End Sub

在 Module1 中有一个 SUB

Public Sub mySub()
    Application.EnableEvents = False
    ThisWorkbook.Worksheets(2).EnableCalculation = True
    ThisWorkbook.Worksheets(2).EnableCalculation = False
    Application.EnableEvents = True
End Sub

现在,在 Sheet1 单元格 A1 中输入 1 - 将显示一个带有“值 1”的消息框。接下来,将 Sheet2 的 EnableCalculation 属性设置为 FALSE 并在 Sheet1 单元格 A1 中输入 2 - 没有任何反应。现在,运行模块 1 中的 mySub - Sheet2 上的单元格 A1 显示 2,并且 Sheet2 的 EnableCalculation 属性设置为 FALSE。到现在为止还挺好。现在在 Sheet1 单元格 A1 中输入 3 - 将显示一个带有“Value 2”的消息框!

似乎在执行 mySub 期间触发了一个 Calculation 事件(即使 Application.EnableEvents 设置为 FALSE)并且存储了 2 的值(在哪里?),然后在输入 3 时释放了该事件Sheet1 上的单元格 A1(即使 Sheet2 的 EnableCalculation 设置为 FALSE)。任何线索这里发生了什么以及如何“修复”这种奇怪的行为?

非常感谢。

【问题讨论】:

    标签: excel events


    【解决方案1】:

    引用http://www.decisionmodels.com

    '将 enablecalculation 设置为 false 然后返回 true 会将工作表上的所有公式标记为未计算。如果计算模式为自动,将触发重新计算。所有计算方法,包括 Sheet.Calculate 但不包括 Range.Calculate,将计算工作表上的所有公式。您可以将此方法用作在工作表而不是工作簿级别模拟Calculatefull 的一种方式。请注意,Sheet.Calculate 不会重置未计算的公式标志,因此在切换 EnableCalculation 属性后连续的两个 Sheet.Calculate 都将执行完整的工作表计算。'

    这似乎解决了它

    Public Sub mySub()
        Application.EnableEvents = False
        Application.Calculation = xlCalculationManual
        ThisWorkbook.Worksheets(2).EnableCalculation = True
        ThisWorkbook.Worksheets(2).EnableCalculation = False
        Application.Calculation = xlCalculationAutomatic
        Application.EnableEvents = True
    End Sub
    

    【讨论】:

    • 感谢您阅读并回复我的帖子。但是,您的建议并不能完全解决问题 - 它阻止了 _Calculate 事件的触发,但它也阻止了在执行 mySub 期间重新计算 Sheet(2)。 mySub 的重点是在不触发 _Calculate 事件的情况下重新计算 Sheet(2)。我还在 MrEXcel.com 论坛 (mrexcel.com/forum/showthread.php?p=2712303#post2712303) 上发布了这个问题,有人建议这可能是一个 MS 错误。 Worksheet_Calculate 似乎还有另一种“奇怪”的行为,我在同一篇文章中对此进行了描述。
    猜你喜欢
    • 2017-08-17
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 2019-11-05
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多