【发布时间】: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)。任何线索这里发生了什么以及如何“修复”这种奇怪的行为?
非常感谢。
【问题讨论】: