Excel 清除从属单元格和具有验证列表的单元格

Excel 清除从属单元格和具有验证列表的单元格,excel,excel-2007,excel-2010,vba,Excel,Excel 2007,Excel 2010,Vba,我需要一些帮助。我正在建立一个包含多个验证列表的电子表格。每个验证列表都有多个链接到它们的验证列表(依赖项)。当我更改第一个验证列表时,我需要清除依赖于它的所有单元格(如果它们附加了验证列表) 我正在尝试创建一个足够动态的宏,这样我就不需要命名范围(我有太多的方法可以这样做)。基本上,如果activecell发生更改/它有一个验证列表和依赖项,那么如果依赖单元格中有验证列表,则清除其内容。从原则上讲,这听起来很直截了当,但这让我很痛苦。。。!!!!有没有人已经准备好了这样一个宏,或者如果有任何建

我需要一些帮助。我正在建立一个包含多个验证列表的电子表格。每个验证列表都有多个链接到它们的验证列表(依赖项)。当我更改第一个验证列表时,我需要清除依赖于它的所有单元格(如果它们附加了验证列表)

我正在尝试创建一个足够动态的宏,这样我就不需要命名范围(我有太多的方法可以这样做)。基本上,如果activecell发生更改/它有一个验证列表和依赖项,那么如果依赖单元格中有验证列表,则清除其内容。从原则上讲,这听起来很直截了当,但这让我很痛苦。。。!!!!有没有人已经准备好了这样一个宏,或者如果有任何建议,我将不胜感激?谢谢你,西亚兰

主要思想

使用动态范围 byval目标作为射程

如果单元格具有从属项 activecell.dependents.count>0

如果实际单元格有验证列表等。
activecell.specialcells(xlcelltypeallvalidation)

以下内容将仅在当前工作表中查看,但可以扩展为在所有工作表中循环。它还仅检查类型列表的验证

Sub ClearListValidations()
    Dim ws As Worksheet    'not used currently
    Dim rngCurrent As Range
    Dim rngValids As Range
    Dim strLookup As String
    Dim rng As Range
    Dim varIntersect As Variant

    Application.ScreenUpdating = False
    Set rngCurrent = ActiveCell
    On Error Resume Next
    Set rngValids = rngCurrent.SpecialCells(xlCellTypeAllValidation)
    On Error GoTo 0     'reinstate error handling
    If rngValids Is Nothing Then Exit Sub   'no list validations

    For Each rng In rngValids
        If rng.Validation.Type = 3 Then     'list validation
            Set varIntersect = Application.Intersect(rngCurrent, _
                Range(Mid(rng.Validation.Formula1, 2)))
            If Not varIntersect Is Nothing Then
                rng.ClearContents
                rng.Validation.Delete
            End If
        End If
    Next rng
    Application.ScreenUpdating = True
End Sub
本质上,如果列表验证的源与当前单元格相交,则会从单元格中删除内容和验证设置


之所以使用
MID()
函数,是因为
Formula1
包含一个等号,我们需要放弃它以形成一个范围。

非常感谢您的帮助。注释对于理解方法非常方便。非常感谢-干杯。欢迎@user1624926。之所以使用MID()函数,是因为公式1包含一个等号,我们需要舍弃它以形成一个范围。