0

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

我正在尝试创建一个足够动态的宏,因此我不需要命名范围(我有太多的方法可以这样做)。基本上,如果活动单元格更改/它有一个验证列表并且有依赖项 - 如果它们中有验证列表,则清除依赖单元格的内容。原则上,这听起来很简单,但它让我死了......!!!!有没有人已经有了这样的宏,或者我会很感激任何建议?谢谢夏兰。

主要思想。

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

如果单元格有依赖项 activecell.dependents.count>0

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

4

1 回答 1

2

以下内容只会在当前工作表中查看,但可以扩展到循环遍历所有工作表。它也只检查列表类型的验证。

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包含一个等号,我们需要将其丢弃以形成一个 Range。

于 2013-06-16T17:25:37.203 回答