Как я могу проверить отредактированное значение ячейки против ее исходного значения? - PullRequest
0 голосов
/ 30 января 2019

Я работаю над электронной таблицей, в которой значения по умолчанию предоставляются пользователю.Я их отформатировал просто (белый фон / черный текст).

Я настроил макрос для форматирования ячеек, как выделенный (желтый фон / жирный текст), когда значение было отредактировано.

IЯ пытаюсь захватить исходное значение (или Value2?) каждой ячейки при ее вводе, чтобы, если пользователь изменяет значение, он выделил ячейку макросом условного форматирования, который я установил, НО, если они вернут значение в какоетам, где изначально подсветка исчезла.

Например, у меня есть столбец «Имя» с ячейкой «Стивен».Если пользователь изменяет эту ячейку, говоря «Джо», она подсвечивается, показывая, что она была отредактирована и больше не является значением по умолчанию.Если пользователь затем отредактирует ячейку, чтобы снова сказать «Стивен», новое значение будет соответствовать исходному, неотредактированному значению, и условное форматирование (выделение) будет удалено.

Я прочитал некоторые учебные пособия здесь но учебники без изменения, отвечающие моим потребностям, приводили к ошибкам.

Я пытался установить значение переменной, но, похоже, это не помогло.

Dim myCellValue As Variant
myCellSetValue.Value = Range.Value2

Это макрос, который я сейчас на месте.Это изменяет форматирование каждой ячейки, как только она нажата, независимо от редактирования.

Private Sub Worksheet_Change(ByVal Target As Range)
    Target.Interior.ColorIndex = 36
    Target.Font.FontStyle = "Bold"
End Sub

Мне нужно
1. применять это форматирование только в случае изменения значения
2. удалить это форматирование, если значение ячейки соответствует исходному значению

Также,есть ли способ «одним кликом вернуть» ячейку к ее первоначальному значению?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Мы можем использовать столбец XFD в качестве «памяти» исходных значений в столбце A .

Сначала введите все исходные значенияв столбце A .

Второй введите его в стандартный модуль и запустите его:

Public A As Range
Public XFD As Range
Public setup As String

Public Sub Initialize()
    Application.EnableEvents = False
        Set A = Range("A:A")
        Set XFD = Range("XFD:XFD")
        A.Copy XFD
        setup = "done"
    Application.EnableEvents = True
End Sub

Третий введитеэто в области кода листа:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Intersekt As Range, r As Range

    If setup <> "done" Then Exit Sub
    Set Intersekt = Intersect(A, Target)
    If Intersekt Is Nothing Then Exit Sub

    For Each r In Intersekt
        If r.Value = XFD(r.Row) Then
            r.ClearFormats
        Else
            r.Interior.Color = 65535
            r.Font.Bold = True
        End If
    Next r

End Sub
0 голосов
/ 30 января 2019

Примерно так же, как база

Public varWas As Variant
Public varTo As Variant

Private Sub Worksheet_Change(ByVal Target As Range)
    varTo = Target.Value
    If varTo = varWas Then
        Target.Interior.Color = vbWhite
        Target.Font.Bold = False
    Else
        Target.Interior.Color = vbRed
        Target.Font.Bold = True
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    varWas = Target.Value
End Sub

**** ОБНОВЛЕНИЕ ****

в стандартном модуле, создайте следующее

Public arrContentsAtStart As Variant
Public rngChecked As Range

Public Sub setup()
    Set rngChecked = ActiveSheet.UsedRange
    arrContentsAtStart = ActiveSheet.UsedRange.Value
End Sub

и затем в модуле рабочего листа добавьте следующее, вам нужно будет запустить настройку на открытой книге. Я полагаю, вам решать, когда получать данные "как есть".

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, rngChecked) Is Nothing Then

        If Target.Value <> arrContentsAtStart(Target.Row, Target.Column) Then

            '   Value change format accordingly
            Target.Font.Bold = True

        ElseIf Target.Value = arrContentsAtStart(Target.Row, Target.Column) Then

            '   Reverted back to original value format accordingly

            Target.Font.Bold = False

        End If

    End If

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