选中时更改单元格填充颜色,取消选中时不更改原始颜色

时间:2018-12-06 18:32:56

标签: excel vba

我有一个Excel 2010工作表和以下要求:

  1. 选择一个单元格时,其填充颜色必须更改以指示其已被选中,并在选择另一个单元格时恢复为其原始颜色。使用下面的代码,即使选择之前该单元格可能是粉红色的,它也会恢复为白色。
  2. 如果用户保存文件,则我不希望将所选单元格的颜色另存为文件的一部分(例如,使用下面的代码,如果我选择一个单元格,请保存,关闭并重新打开文件,则该单元格具有即使未选中该颜色也是如此。)
  3. 代码必须在受保护的工作表上工作
  4. 代码必须在合并的单元格上工作

这是我的代码:

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

答案 0 :(得分:1)

这是一个有趣的任务!这将需要一些步骤:

1)添加一个标准模块(例如Module1)并创建两个公共变量:

text = "This is a link"
target = "http://example.com"
print(f"\u001b]8;;{target}\u001b\\{text}\u001b]8;;\u001b\\")

2)返回您的工作表事件,您需要使用以下代码:

Public g_lngEXISTINGCOL        As Long
Public g_rngPREVIOUSTARGET     As Excel.Range

3)为了在保存工作簿之前恢复到原始的内部颜色,您需要双击“ ThisWorkbook”并添加BeforeSave Event:

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

希望有帮助!