【问题标题】:Determine whether an Excel cell is Dirty or not?确定 Excel 单元格是否脏?
【发布时间】:2019-02-04 13:34:30
【问题描述】:

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

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

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

【问题讨论】:

  • ' 强制重新计算范围 A3。 ` Application.Range("A3").Dirty ` MsgBox "尝试关闭文件而不保存,会出现一个对话框。"
  • ?ThisWorkbook.Saved 如果未更改,则返回 True,如果已更改,则返回 False。
  • @skkakkar 这两个都不会让您找出必须计算哪些单元格。
  • @PEH 这里有一个识别脏单元的参考 stackoverflow.com/questions/50817709/…>
  • @skkakkar Worksheet_Change 只能确定哪些单元格常数发生了变化,但不能确定哪些单元格公式在重新计算时会发生变化。所以这不会给你脏单元格,而只会给你值(常量)改变的单元格。

标签: excel vba range cell


【解决方案1】:

我认为没有办法确定哪些单元格当前是脏的。

但是你可以做一个技巧(即使它不是完全你正在寻找的东西,但我认为你能得到最接近的):

将您要检查脏单元格的范围读入一个数组(不要在整个工作表上执行此操作,否则您可能会用完时间!)...

Dim RngToCheck() As Variant
RngToCheck = Range("A1:B10").Value

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

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

【讨论】:

  • 如果重新计算后单元格的值没有变化怎么办?我需要知道它是否是计算出来的,不管值是否改变。
  • 我告诉过你“不完全是你要找的,但我认为你能得到最接近的”,很抱歉这个功能没有实现。实际上,如果没有一个单元格依赖于变化的值,Excel 不应该重新计算一个单元格(当然除了 volitle 函数或强制计算)。 • 除了出于教育目的进行展示之外,我实际上没有看到该功能有任何实际用途,所以这可能是它没有内置的原因。 • 如果您计划“课程”,只需编写一个演示来展示可能的原理足以理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多