excel - 选择时更改单元格填充颜色,取消选择时更改原始颜色
问题描述
我有一个 Excel 2010 工作表和以下要求:
- 当一个单元格被选中时,它的填充颜色必须改变以表明它被选中,并在另一个单元格被选中时恢复到原来的颜色。使用下面的代码,单元格将恢复为白色,即使它在被选中之前可能是粉红色的。
- 如果用户保存文件,我不希望将所选单元格的颜色保存为文件的一部分(例如,使用下面的代码,如果我选择一个单元格,保存,关闭并重新打开文件,该单元格甚至具有该颜色虽然它没有被选中)。
- 代码必须在受保护的工作表上工作
- 该代码必须适用于合并的单元格
这是我的代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static xLastRng As Range
On Error Resume Next
Target.Interior.ColorIndex = 6
xLastRng.Interior.ColorIndex = xlColorIndexNone
Set xLastRng = Target
End Sub
解决方案
这是一个有趣的任务!这将需要几个步骤:
1)添加一个标准模块(例如Module1)并创建两个公共变量:
Public g_lngEXISTINGCOL As Long
Public g_rngPREVIOUSTARGET As Excel.Range
2)回到您的工作表事件,您需要使用以下代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngTarget As Excel.Range
On Error Resume Next
Set rngTarget = Application.Intersect(Me.UsedRange, Target)
On Error GoTo 0
If Not rngTarget Is Nothing Then
If rngTarget.Cells.Count = 1 Then
With Target
If Not g_rngPREVIOUSTARGET Is Nothing Then
If g_lngEXISTINGCOL = 16777215 Then
g_rngPREVIOUSTARGET.Interior.ColorIndex = 0
Else
g_rngPREVIOUSTARGET.Interior.Color = g_lngEXISTINGCOL
End If
End If
g_lngEXISTINGCOL = .Interior.Color
Set g_rngPREVIOUSTARGET = Target
.Interior.ColorIndex = 6
End With
End If
End If
End Sub
3)为了在保存工作簿之前恢复原来的内部颜色,您需要双击“ThisWorkbook”并添加BeforeSave事件:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Not g_rngPREVIOUSTARGET Is Nothing Then
g_rngPREVIOUSTARGET.Interior.Color = g_lngEXISTINGCOL
End If
End Sub
希望能帮助到你!
推荐阅读
- java - SpringBoot openJ9 Kubernetes Crash InterpreterEmulator.cpp:208
- amazon-web-services - 为什么我的安全组规则在从私有子网调用到公共子网时不起作用?
- lazarus - SynCrypto.pas 和 Lazarus 编译问题
- python - 如何解析然后解解析 url 查询字符串,以便它以与以前相同的格式/编码结束?
- c# - 使用 Autofac 将 SignalR IHubContext 注入控制器
- android - 使用 Anroid 库进行图像缓存
- javascript - 如何使用 JS 动态删除 JSON 中的父级?
- ios - 我的硬件通过 WAC 连接需要什么
- mysql - Woocommerce:如何以编程方式更新所有产品的元属性值
- r - 如果向量元素之一具有 NA 或不是 R 中的整数,如何让我的自定义函数返回错误消息?