2011-05-11 23 views
0

並感謝您閱讀我的文章。我在Excel(Windows 7 Ultimate,Excel 2010)中遇到了Worksheet_Calculate事件的一個奇怪(在我看來)行爲 ,讓我通過給你一個設置來描述我遇到的問題。Excel中的Worksheet_Calculate事件的行爲 - 存儲的事件?

帶2張工作簿。片2細胞A1具有式= Sheet 1中!A1,Sheet 2中的EnableCalculation屬性被設置爲TRUE,並且Sheet 2中的對象有一個Sub

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

在模塊1有一個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 Cell A1中輸入3 - 顯示「Value 2」的消息框!

似乎在執行mySub期間,計算事件被觸發(即使Application.EnableEvents設置爲FALSE),並且存儲了2的值(其中?),然後在輸入3時釋放了此事件放到Sheet1上的單元格A1中(儘管Sheet2的EnableCalculation設置爲FALSE)。任何線索發生了什麼,以及如何「修復」這種奇怪的行爲?

非常感謝。

回答

0

http://www.decisionmodels.com

報價「設置enablecalculation爲false,然後返回到真實意願標誌工作表未計算上所有的公式。如果計算模式爲自動,則會觸發重新計算。所有計算方法(包括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 
+0

謝謝您的閱讀和回覆我的帖子。但是,您的建議並未解決問題 - 它會阻止_Calculate事件觸發,但它也會阻止在執行mySub期間重新計算Sheet(2)。 mySub的要點是在不觸發_Calculate事件的情況下重新計算Sheet(2)。我也在MrEXcel.com論壇上發佈了這個問題(http://www.mrexcel.com/forum/showthread.php?p=2712303#post2712303),是否有人建議它可能是MS錯誤。似乎還有另一個Worksheet_Calculate的「奇怪」行爲,我在同一篇文章中描述過。 – Confounded 2011-05-13 15:00:48