清除依赖项并具有验证列表的单元格

时间:2013-06-16 16:56:49

标签: excel excel-vba excel-2007 excel-2010 vba

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

我正在尝试创建一个足够动态的宏,所以我不需要命名范围(我有太多要做的事情)。基本上,如果activecell更改/它有一个验证列表并具有依赖 - 然后清除依赖单元格的内容,如果它们中包含验证列表。原则上它听起来很直接,但它杀了我...... !!!!有没有人有这样的宏已经到位或者我会感激任何建议?谢谢Ciaran。

主要观点。

使用动态范围     byval target as range

如果细胞有依赖性     activecell.dependents.count大于0

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

1 个答案:

答案 0 :(得分:2)

以下内容仅在当前工作表中查看,但可以扩展为遍历所有工作表。它还只检查List类型的验证。

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

基本上,如果List-Validation的源与当前单元格相交,它将从单元格中删除内容和验证设置。

使用MID()函数,因为Formula1包含等号,我们需要将其丢弃以形成范围。