有什么工具来跟踪Excel单元格和VBA代码的依赖关系吗?
Excel具有跟踪单元格的precedents
和dependents
的function(通过菜单Tools > Auditing
)。 例如,如果我们在C4
有= C3 + 1
,那么Excel可以追踪到C4
是C3
的依赖( C3
是C4
的先例)。
由于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
对象具有Precedents
和Dependents
属性。 这允许您从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…