圆形无效数据宏

时间:2012-11-02 12:10:35

标签: vba excel-vba excel

我有一个工作表,其中有许多依赖的下拉列表,如果初始下拉列表被更改,则可能会出现无效数据。我想要一个简单的自动宏,每次检测到指定范围内的单元格变化(D8:T800)时,它会自动运行“circle invalid data”命令。

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

问题 - 由于这个宏每次都会运行一个单元格,这个宏会减慢工作表吗?

编辑: 另外:由于这可能很慢,我们是否可以在选定范围内运行此命令?

你的想法谢谢。

2 个答案:

答案 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