Q:在Excel VBA代码中,我有时会看到Range对象的Dirty方法,能够说明一下该方法的作用吗?
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