Q:在Excel VBA代碼中,我有時會看到Range對象的Dirty方法,能夠說明一下該方法的作用嗎?
A:Dirty方法與工作簿重新計算有關,指定下次重新計算發生時,需要進行重新計算的單元格區域。
通常,Calculate方法強制重新計算指定的區域,此時Microsoft Excel知道需要重新計算的單元格。
然而,如果Excel設置為手動計算模式,就可以使用Dirty方法指示Excel識別要重新計算的特定單元格。如果Excel本來就處于自動計算模式,使用Dirty方法將指示Excel執行重新計算。
下面是官方文檔給出的一個示例。
Sub UseDirtyMethod()
MsgBox “輸入兩個值和一個公式.”
Range(“A1”).Value = 1
Range(“A2”).Value = 2
Range(“A3″).Formula =”=A1+A2”
‘ 保存對工作表的改變
Application.DisplayAlerts = False
ActiveWorkbook.Save
MsgBox “修改已保存.”
‘ 強制對單元格A3進行重新計算.
Application.Range(“A3”).Dirty
MsgBox “試圖關閉文件而不保存,將出現一個對話框.”
End Sub
代碼先在工作表中輸入數據后進行了保存,然后強制對單元格A3進行重新計算,此時表現上看工作簿沒有發生變化,但Excel認為重新計算后工作簿已經發生了變化,如果不保存而關閉工作簿,就會出現如下所示的警告信息框。
上面是在Excel處于自動重算模式時的結果。如果Excel處于手動重算模式,也可以使用Dirty方法發揮重新計算功能。
例如,在單元格B3中輸入公式:
=RAND()
在VBE中輸入如下的代碼:
Sub testDirty()
‘設置工作簿計算模式為手動重算
Application.Calculation =xlCalculationManual
‘在工作表中輸入數據使工作表發生變化
Range(“C3″).Value = ” Excel”
Range(“C4”).Select
‘強制重新計算單元格B3
Range(“B3”).Dirty
‘保存當前工作簿
ActiveWorkbook.Save
End Sub