【问题标题】:Cell Highlighting for Worksheet Selection Change Event工作表选择更改事件的单元格突出显示
【发布时间】:2020-12-04 15:02:06
【问题描述】:

我正在尝试在工作表中创建一个选择更改事件,如果单元格中有值,则将该单元格的内部颜色删除为无。但是,如果没有值,则保持原来的内部颜色相同。而且,我如何将选择更改事件限制为仅特定列(当然减去空单元格)。到目前为止我能想出的 vba 代码是:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  If Target.Value <> "" Then
     Target.Interior.Color = xlNone
  Else
     Target.Interior.Color = 13551615
  End If

End Sub

但是,当我在单元格中输入一些数据时,内部颜色并没有变为无。只有当我点击离开并重新点击该单元格时,内部颜色才会变为无。我需要做些什么来使更改立即生效,这样我就不必单击离开并单击返回?另外,如何写入限制以仅允许在特定列而不是整个工作表中发生此选择更改?

【问题讨论】:

  • 为什么不使用条件格式?
  • 因为我试图通过宏来自动化这个过程。条件格式意味着我必须手动选择数据,单击条件格式按钮,然后指定要格式化的条件。

标签: excel vba


【解决方案1】:

当您在单元格中输入值时,您的选择不会改变。如果要根据新值更改Interior.Color,则需要利用Worksheet.Change 事件。

首先,关于选择更改应生效的范围的限制:

检查选择(目标)和范围,在您的情况下,G 列中的某些单元格 Intersect 然后,这是可选的,仅在选择一个单元格而不是更多时进行更改。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("G2:G1000")) Is Nothing Then
        If Not Target.CountLarge > 1 Then
            If Target.Value <> "" Then
                Target.Interior.Color = xlNone
            Else
                Target.Interior.Color = 13551615
            End If
        End If
    End If
End Sub

要识别单元格值的更改,请将相同的代码放入Worksheet.Change Event Sub:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("G2:G1000")) Is Nothing Then
        If Not Target.CountLarge > 1 Then
            If Target.Value <> "" Then
                Target.Interior.Color = xlNone
            Else
                Target.Interior.Color = 13551615
            End If
        End If
    End If
End Sub

此时,您可能应该将代码外包给单个 sub,然后简单地从事件 subs 中调用它。

【讨论】:

  • 谢谢!这就像一个魅力!非常感谢!
猜你喜欢
  • 2018-03-12
  • 2015-11-24
  • 2014-01-18
  • 2013-05-17
  • 2014-01-15
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多