Excel VBA递归获取依赖单元格

时间:2013-09-19 01:21:02

标签: vb.net excel

我正在编写一个程序,它应该从给定的单元格地址获取所有依赖单元格,直接或间接地影响同一工作表中的其他单元格值。 对于前。

A1 = 10
A2 = A1+20
A3 = A2+30

如果我想要A3的依赖,它应该产生A1和A2。

我已经使用了Range.Dependents方法,它应该提供所有依赖单元格,但它失败了。因此,我正在尝试使用Range.DirectDependents,它只返回直接的单元格依赖项,并编写一个递归函数来为每个结果执行相同操作。 对于前者A3列表A2再次A2递归返回A1。

我的问题是

  1. 为什么Range.dependents无法正确列出所有嵌套的依赖单元格。

  2. 对每个单元格使用递归方法是个好主意。 (我们不确定它们的深度)

  3. 这是我的示例代码

    Dim Address As String
    Try
        For Each DataRange In ValidRange
            cellAddress = DataRange.Address
            Try
                cellRange = DataRange.Dependents
                Slno = Slno + 1
                Address = cellRange.Address
                Output = Output & "<tr><td>" & Slno & "<td>" & cellAddress & "</td><td>" & Address & "</td></tr>"
            Catch ex As Exception
                'Skip if no dependencies found
            End Try
        Next
    Catch ex As Exception
            Response.Write(ex.Message)
    End Try
    

2 个答案:

答案 0 :(得分:6)

快速尝试并找到以下

?Range("A1").Dependents.Address
$A$2:$A$3

?Range("A2").Dependents.Address
$A$3

?Range("A3").Dependents.Address
Run-time error

显然,您要找的是Range.Precedents

?Range("A3").Precedents.Address
$A$1:$A$2

答案 1 :(得分:3)

为VBA试用此代码

Sub test()

    On Error Resume Next

    Dim cell As Range, c As Range
    Set cell = Range("A3").Precedents

    If cell Is Nothing Then Exit Sub

    For Each c In cell
        Debug.Print c.Address
    Next

End Sub

enter image description here