我需要一些帮助。我正在设置一个包含多个验证列表的电子表格。每个验证列表都有多个链接到它们的验证列表(依赖项)。当我更改第一个验证列表时,我需要清除所有依赖它的单元格(如果它们附有验证列表)。
我正在尝试创建一个足够动态的宏,所以我不需要命名范围(我有太多要做的事情)。基本上,如果activecell更改/它有一个验证列表并具有依赖 - 然后清除依赖单元格的内容,如果它们中包含验证列表。原则上它听起来很直接,但它杀了我...... !!!!有没有人有这样的宏已经到位或者我会感激任何建议?谢谢Ciaran。
主要观点。
使用动态范围 byval target as range
如果细胞有依赖性 activecell.dependents.count大于0
如果实际单元格有验证列表等。 activecell.specialcells(xlcelltypeallvalidation)
答案 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
包含等号,我们需要将其丢弃以形成范围。