Excel中Worksheet_Calculate事件的行为 - 存储事件?

时间:2011-05-11 10:55:37

标签: excel events

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

带2张工作簿。 Sheet 2 Cell 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上的Cell A1显示2,Sheet2的EnableCalculation属性设置为FALSE。到现在为止还挺好。现在在Sheet1 Cell A1中输入3 - 显示一个带有“值2”的消息框!

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

非常感谢。

1 个答案:

答案 0 :(得分:0)

来自http://www.decisionmodels.com

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

这似乎解决了这个问题

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