我有一个包含许多相关下拉列表的工作表,如果初始下拉列表被更改,这些下拉列表可能会出现无效数据。我想要一个简单的自动宏,每次检测到指定范围(D8:T800)内的单元格更改时,它都会自动运行“圈出无效数据”命令。
这听起来很简单,但我不知道该怎么做。
问题 - 因为这个宏将在每次修改单元格时运行,这个宏会减慢工作表的速度吗?
编辑:另外:因为这可能很慢,有没有办法我们可以在选定的范围内运行这个命令?
你的想法谢谢。
尝试这个
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
尝试将此代码放在您的工作表中:
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