当不取消时改变原来的颜色选择更改单元格的填充色

问题描述 投票:1回答:1

我有一个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
excel vba
1个回答
1
投票

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

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

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

希望能帮助到你!

© www.soinside.com 2019 - 2024. All rights reserved.