我有一个工作表,其中有许多依赖的下拉列表,如果初始下拉列表被更改,则可能会出现无效数据。我想要一个简单的自动宏,每次检测到指定范围内的单元格变化(D8:T800)时,它会自动运行“circle invalid data”命令。
这听起来相当简单,但我不知道该怎么做。
问题 - 由于这个宏每次都会运行一个单元格,这个宏会减慢工作表吗?
编辑: 另外:由于这可能很慢,我们是否可以在选定范围内运行此命令?
你的想法谢谢。
答案 0 :(得分:4)
试试这个
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("D8:T800")) Is Nothing Then
Me.CircleInvalid
End If
End Sub
请注意,CircleInvalid
适用于整个工作表,因此虽然此代码仅在D8:T800
内的单元格发生更改时触发,但表格中的所有无效单元格将被圈选< / p>
答案 1 :(得分:1)
尝试将此代码放在工作表中:
Private Sub Worksheet_Change(ByVal Target As Range)
' Check target range has changed
If (Not Intersect(Target, Range("D8:T800")) Is Nothing) Then
' Prevent recusrive looping
Application.EnableEvents = False
' Refresh validation circles
Target.Worksheet.CircleInvalid
Application.EnableEvents = True
End If
End Sub
请注意,如果这些单元格中的值因指定范围外的计算而发生变化,则此方法无效。
此外,CircleInvalid方法适用于整个工作表。
如果目标经过验证,您可以尝试编辑条件中的代码以“执行某些操作” - 这会导致您更改无效单元格的格式,而不是围绕它们使用红色圆圈。
**PSEUDO-CODE**
For each cell in Target.Range
cell.colour = bright red
Next cell