Vb.net Excel VBA递归获取依赖单元格

Vb.net Excel VBA递归获取依赖单元格,vb.net,excel,Vb.net,Excel,我正在编写一个程序,它应该从给定的单元格地址获取所有依赖单元格,直接或间接地影响同一工作表中的其他单元格值。 例如 如果我想要A3的依赖关系,它应该是A1和A2 我已经使用了方法Range.Dependents,它应该给出所有依赖单元格,但是失败了。因此,我也尝试使用Range.DirectDependents,它只返回即时单元格依赖项,并编写递归函数对每个结果执行相同的操作。 对于示例A3,列表A2和A2递归返回A1 我的问题是 为什么Range.dependents无法正确列出所有嵌套的依赖

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

如果我想要A3的依赖关系,它应该是A1和A2

我已经使用了方法
Range.Dependents
,它应该给出所有依赖单元格,但是失败了。因此,我也尝试使用
Range.DirectDependents
,它只返回即时单元格依赖项,并编写递归函数对每个结果执行相同的操作。 对于示例A3,列表A2和A2递归返回A1

我的问题是

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

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

  • 这是我的示例代码

    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
    
    Dim地址作为字符串
    尝试
    对于ValidRange中的每个数据范围
    cellAddress=DataRange.Address
    尝试
    cellRange=DataRange.Dependents
    Slno=Slno+1
    Address=cellRange.Address
    输出=输出&&&Slno&&cellAddress&&Address&&
    特例
    '如果未找到依赖项,则跳过
    结束尝试
    下一个
    特例
    响应。写入(例如消息)
    结束尝试
    
    快速尝试并发现以下问题

    ?Range("A1").Dependents.Address
    $A$2:$A$3
    
    ?Range("A2").Dependents.Address
    $A$3
    
    ?Range("A3").Dependents.Address
    Run-time error
    
    显然,您要查找的是
    范围。先例

    ?Range("A3").Precedents.Address
    $A$1:$A$2
    
    请为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
    

    VBA不存在Try/Catch语句。。。这是VB脚本还是VB.Net?您可能还想查看它的VB.Net,并尝试在VB.Net中使用catch
    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