确定Excel单元格是否脏?

确定Excel单元格是否脏?,excel,vba,range,cell,Excel,Vba,Range,Cell,我正在编写一个“课程”,帮助用户理解某些实践如何不必要地标记Excel单元格进行计算 我知道Dirty方法可用于在VBA中标记要计算的单元格。是否有方法确定某个特定单元格是否标记为计算(在VBA中) 我希望能够在工作表中的单元格中循环并突出显示需要重新计算的单元格。我希望用户能够直观地检查由于某个操作而创建了多少脏单元格。我认为无法确定当前哪些单元格脏 但是你可以做一个技巧(即使它不是你想要的,但我认为你能得到的最接近的): 将要检查脏单元格的区域读取到数组中(不要在整个工作表上执行此操作,否则

我正在编写一个“课程”,帮助用户理解某些实践如何不必要地标记Excel单元格进行计算

我知道
Dirty
方法可用于在VBA中标记要计算的单元格。是否有方法确定某个特定单元格是否标记为计算(在VBA中)


我希望能够在工作表中的单元格中循环并突出显示需要重新计算的单元格。我希望用户能够直观地检查由于某个操作而创建了多少脏单元格。

我认为无法确定当前哪些单元格脏

但是你可以做一个技巧(即使它不是你想要的,但我认为你能得到的最接近的):

将要检查脏单元格的区域读取到数组中(不要在整个工作表上执行此操作,否则可能会耗尽时间!)

然后计算工作表,然后将重新计算的工作表与数组中的值进行比较。更改的值在计算之前是脏的


请注意,不可能恢复到计算前的状态。因此,您只能在重新计算之前确定哪些单元格是脏的。

'强制重新计算A3范围。`Application.Range(“A3”).Dirty`MsgBox“尝试在不保存的情况下关闭该文件,将出现一个对话框。”?ThisWorkbook.Saved如果未更改,则返回True;如果已更改,则返回False。@skkakkar这两者都不会让您知道必须计算哪些单元格。@PEH这里有一个标识脏单元格的引用@skkakkar
工作表\u Change
只能确定哪些单元格常数已更改,而不能确定哪些单元格公式会更改重新计算时的更改。因此,这不会给出脏单元格,而只给出值(常量)发生更改的单元格。如果重新计算后单元格的值没有更改,该怎么办?我需要知道它是否是计算出来的,无论值是否改变。我告诉过你“不完全是你想要的,但我认为你能得到的最接近的”,很抱歉,该功能只是没有实现。实际上,Excel不应该重新计算一个单元格,如果它所依赖的单元格中没有一个更改了值(当然除了volitle函数或强制计算)除了出于教育目的而显示外,我实际上没有看到该功能的任何实际用途,所以这可能就是为什么它没有内置的原因如果你计划上一堂“课”,只需写一个演示来展示可能足以理解的原理。
Dim RngToCheck() As Variant
RngToCheck = Range("A1:B10").Value