Изменить цвет заливки ячейки, если он выбран, без изменения исходного цвета при отмене выбора. - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть лист 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 голосов
/ 06 декабря 2018

Это интересное задание!Для этого потребуется выполнить несколько шагов:

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» и добавить событие «Перед сохранением»:

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...