簡體   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