如何在 Excel 中查找单元格的所有依赖项(还有条件格式和数据验证)

Mus*_*old 5 excel vba excel-2010

我需要清理一个非常复杂的 Excel 文件。

为了能够擦除单元格,我需要确保它没有在工作簿中的某处使用。我知道可以通过进入公式审核 > 跟踪依赖项来确定一个单元格是否在另一个单元格的公式中使用,但是如果在以下上下文中使用该单元格,则这不起作用:

  • 用于另一个单元格的数据验证中的下拉列表的范围的一部分
  • 在另一个单元格的条件格式的公式部分。

这 2 个 Excel 功能在工作簿中经常使用。

您知道找出这些依赖项的方法吗?

Nat*_*Sav 3

尝试这样的事情,不是 100%,但看起来它可以通过简单的测试起作用

Sub DependantTest()

For Each i In DependantOnValidation(Range("A1"))

    Debug.Print i

Next i

End Sub
Run Code Online (Sandbox Code Playgroud)

使用此功能

Function DependantOnValidation(rngLookAt As Excel.Range) As Collection

Dim ws As Worksheet Dim rInspect As Range Dim rWorking As Range Dim rIntersect As Range

Set ws = ThisWorkbook.Worksheets("sheet1")

On Error Resume Next

Set DependantOnValidation = New Collection

For Each rInspect In ws.Range("a1:z1")

    Set rWorking = Range(Replace(rInspect.Validation.Formula1, "=", vbNullString))

    If Not rWorking Is Nothing Then

        Set rIntersect = Application.Intersect(rngLookAt, rWorking)
        DependantOnValidation.Add rInspect.Address

    End If

    Set rWorking = Nothing
     Next rInspect

End Function
Run Code Online (Sandbox Code Playgroud)

对于 CF 来说,这样的东西并不完整

If rInspect.FormatConditions.Count > 0 Then
    For Each fCondition In rInspect.FormatConditions
        If fCondition.Formula1 <> "" Then
            If InStr(1, fCondition.Formula1, rngLookAt.Address(True, True)) > 0 Or _
                    InStr(1, fCondition.Formula1, rngLookAt.Address(False, True)) > 0 Or _
                        InStr(1, fCondition.Formula1, rngLookAt.Address(True, False)) > 0 Then

            End If
        End If
    Next fCondition
End If
Run Code Online (Sandbox Code Playgroud)