有什么工具来跟踪Excel单元格和VBA代码的依赖关系吗?

Excel具有跟踪单元格的precedentsdependents的function(通过菜单Tools > Auditing )。 例如,如果我们在C4= C3 + 1 ,那么Excel可以追踪到C4C3的依赖( C3C4的先例)。

由于VBA代码也影响Excel单元格,我想知道是否有任何工具来跟踪VBA代码和Excel单元格之间的依赖关系。

例如,如果有一行VBA代码Range("C4").Value = Range("C3").Value + 1 ,是否有一个工具来跟踪C4可能是C3的依赖?

此外,如果有一行VBA代码Range("C4").Value = 5 ,有没有一个工具来跟踪C4可能会被这段代码修改?

由VBA所做的更改无法轻松跟踪(因为单元格可能会被函数以任意方式修改,或者以stringforms传递给函数)。

有些东西你可以做,但有点棘手,我想这不会让你满意:你可以检测一个单元是否有任何依赖。

怎么运行的? 写一个像这样的macros:

 Private Sub Worksheet_Change(ByVal Target As Excel.Range) End Sub 

您可以在即时窗口login更改的单元格。 现在改变单元格值,在即时窗口中,您将看到所有依赖于您更改的单元格的单元格。 缺点是什么?

  • 不幸的是,逆过程是不可能的:你不能select一个单元格,并查看它的所有依赖关系。
  • 这个过程不能(真的)自动化,因为从代码通常你不知道单元格的有效值(你可能会猜测单元格types,但由于规则你不能确定,“0”可能是一个有效的值,“1 “不,例如)。
  • 它不能真正检测到每个依赖项(如果两个给定的值不会在一个单元格中产生变化,那么你将不会看到这个依赖项)。
  • 对于大型工作表来说,它可能非常繁琐,所以只有在应用于一小组单元格时才会显示(如果我更改/移动此单元格,会影响任何内容?)

我不知道下面是否回答你的问题 – 但我认为这是有帮助的。

Range对象具有PrecedentsDependents属性。 这允许您从VBA内部执行菜单Tools->auditing在UI中执行的操作。 (我必须承认@ Bathsheba的回答这个最近的问题https://stackoverflow.com/a/20635795/1967396教我这个…)。

 Dim prec, p Set prec = [C4].Precedents ' [C4] is shorthand for Range("C4") For Each p in prec Debug.Print "Precedent found: " & p.Address next p 

注意 – 你确实需要Set ; 否则你最终的先例的价值 ,而不是引用的对象 (在这种情况下,你看不到的地址…)

你可以用.Dependents做同样的事情,显然是:

这不回答“如果有一行VBA代码创build关系”的问题…这是特别棘手,因为你可以通过variables和不可预知的偏移修改单元格,例如

 For j = 1 To n [B5].Offset(j+3, 2+k) = [A2].Offset(Int(DateValue(Now)) Mod 3, 1) Next j 

哪个单元取决于什么取决于你运行这个脚本的date…