4

我有一个包含许多相关下拉列表的工作表,如果初始下拉列表被更改,这些下拉列表可能会出现无效数据。我想要一个简单的自动宏,每次检测到指定范围(D8:T800)内的单元格更改时,它都会自动运行“圈出无效数据”命令。

这听起来很简单,但我不知道该怎么做。

问题 - 因为这个宏将在每次修改单元格时运行,这个宏会减慢工作表的速度吗?

编辑:另外:因为这可能很慢,有没有办法我们可以在选定的范围内运行这个命令?

你的想法谢谢。

4

2 回答 2

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

于 2012-11-02T12:37:30.640 回答
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
于 2012-11-02T12:18:46.063 回答