Excel有一个功能,以跟踪precedents
和dependents
的细胞(通过菜单Tools > Auditing
)。 例如,如果我们有= C3 + 1
在C4
,然后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所做的更改不能容易地跟踪(因为细胞可以以任意方式由函数被修改或传递给函数作为字符串)。
也有一些是你可以做,但它是一个有点棘手,我想它不会真正满足你:如果一个单元有任何依赖你可以检测到。
这个怎么运作? 写这样的宏:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
End Sub
您可以登录到即时窗口更改的单元格。 现在更改单元格的值,在即时窗口中,你会看到,取决于你改变了小区内的所有细胞。 缺点是什么?
- 不幸的是,逆过程是不可能的:你不能选择一个单元格,并查看其所有的依赖。
- 该过程不能(真的),因为从代码自动通常你不知道有效值细胞(你可以通过细胞类型的猜测,但由于规则,你不能确定,“0”可能是一个有效的价值和“1 “没有,例如)。
- 它不能真正检测每个依赖(如果两个给定的值不会产生在细胞中产生变化,那么你将无法看到的依赖)。
- 对于大的工作表也可以是很乏味的,所以如果应用到一小部分细胞的它只是表明(如果我改变/移动这个小区?它会影响什么?)
我不知道下面回答你的问题 - 但我认为这是有帮助的。
该Range
对象有一个Precedents
和Dependents
财产。 这可以让你从内VBA,做什么样的菜单Tools->auditing
确实在UI中。 (我不得不承认@拔示巴的回答这个问题,最近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代码行”的问题......这是特别棘手,因为你可以通过可变和不可预测的偏差,例如修饰细胞
For j = 1 To n
[B5].Offset(j+3, 2+k) = [A2].Offset(Int(DateValue(Now)) Mod 3, 1)
Next j
其中细胞要看是什么将取决于您运行此脚本的日期...