是否有跟踪Excel单元格和VBA代码依赖任何工具?(Is there any tool to tr

2019-09-16 17:23发布

Excel有一个功能,以跟踪precedentsdependents的细胞(通过菜单Tools > Auditing )。 例如,如果我们有= C3 + 1C4 ,然后Excel中可以跟踪C4是一个依赖的C3C3是一个先例C4 )。

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

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

此外,如果有VBA代码的行Range("C4").Value = 5 ,在那里以跟踪一个工具C4可能由这一段代码被修改?

Answer 1:

通过VBA所做的更改不能容易地跟踪(因为细胞可以以任意方式由函数被修改或传递给函数作为字符串)。

也有一些是你可以做,但它是一个有点棘手,我想它不会真正满足你:如果一个单元有任何依赖你可以检测到。

这个怎么运作? 写这样的宏:

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

您可以登录到即时窗口更改的单元格。 现在更改单元格的值,在即时窗口中,你会看到,取决于你改变了小区内的所有细胞。 缺点是什么?

  • 不幸的是,逆过程是不可能的:你不能选择一个单元格,并查看其所有的依赖。
  • 该过程不能(真的),因为从代码自动通常你不知道有效值细胞(你可以通过细胞类型的猜测,但由于规则,你不能确定,“0”可能是一个有效的价值和“1 “没有,例如)。
  • 它不能真正检测每个依赖(如果两个给定的值不会产生在细胞中产生变化,那么你将无法看到的依赖)。
  • 对于大的工作表也可以是很乏味的,所以如果应用到一小部分细胞的它只是表明(如果我改变/移动这个小区?它会影响什么?)


Answer 2:

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

Range对象有一个PrecedentsDependents财产。 这可以让你从内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

其中细胞要看是什么将取决于您运行此脚本的日期...



文章来源: Is there any tool to trace dependency of Excel cells and VBA code?