excel - 工作表选择更改事件的单元格突出显示
问题描述
我正在尝试在工作表中创建一个选择更改事件,如果单元格中有一个值,则将该单元格的内部颜色删除为无。但是,如果没有值,则保持原来的内部颜色相同。而且,我如何将选择更改事件限制为仅特定列(当然减去空单元格)。到目前为止,我能够想出的 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
但是,当我在单元格中输入一些数据时,内部颜色并没有变为无。只有当我点击离开并重新点击该单元格时,内部颜色才会变为无。我需要做些什么来使更改立即生效,这样我就不必单击离开并单击返回?此外,如何写入限制以仅允许此选择更改发生在特定列而不是整个工作表中?
解决方案
在单元格中输入值时,您的选择不会改变。如果要更改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
此时,您可能应该将代码外包给单个子程序,并简单地从事件子程序中调用它。
推荐阅读
- spring-boot - 如何应对 Spring Boot 2.2.0 中的 x-forwarded-headers?(反向代理背后的Spring Web MVC)
- neural-network - Cupy 错误:cudaErrorIllegalAddress - 遇到非法内存访问
- sql - Reg:内部连接查询
- angular - Angular 8 - 无法将标头设置为 HttpRequest
- r - 在 R 中的 read.table 上,flush 函数有什么作用?
- javascript - Vue + Nuxt.js - 如何用组件缓存整个页面?
- c# - dotnetcore 3 web api外部登录与谷歌GetExternalLoginInfoAsync大多数时候返回null
- z3 - Gurobi 可以用来解决 SMT-LIB 文件吗?
- linq - LinQ - 尝试按子属性排序时出错
- java - INSERT 不包含 spring-data-r2dbc 的值