繁体   English   中英

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

[英]Behaviour of Worksheet_Calculate event in Excel – stored events?

并感谢您阅读我的文章。 我在Excel(Windows 7 Ultimate,Excel 2010)中遇到了Worksheet_Calculate事件的奇怪(我认为)行为,请允许我通过设置来描述我遇到的问题。

拿一张2张工作簿。 工作表2的单元格A1具有公式= Sheet1!A1,工作表2的EnableCalculation属性设置为TRUE,并且在工作表2对象中有一个子

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 –将显示一个带有“值2”的消息框!

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

非常感谢。

引用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM