Выполнить код, если значение, введенное в ячейку, не совпадает с предыдущим значением - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть проверка данных в виде списка для некоторых ячеек (возможные значения: «Зарегистрировано», «Список ожидания», «Отменено»).Мне нужно выполнить некоторый код, если значение этих ячеек изменяется, только если новое значение не совпадает с существующим.Вопрос в том, как заставить Excel сравнить предыдущее значение ячейки с текущим.

Я попробовал это решение ( Как получить старое значение измененной ячейки в Excel VBA? ), но оно не сработало.Что мне не хватает?Вот пример кода.В настоящее время он изменяет цвета ячеек, даже если я ввожу то же значение.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim previous_value As String

previous_value = oval

Select Case Target.Value
    Case Is = "enrolled"
        If previous_value = Target.Value Then
        MsgBox "you entered the same value"
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True

        Else 
        Target.Interior.Color = vbBlue

        End If
    Case Is = "waitlisted"
' (....etc.)
End Select


End Sub

Public Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim oval As String

If Selection.Cells.Count = 1 Then
    oval = Target.Value
End If
End Sub

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Вот окончательный код.Спасибо @PGCodeRider за помощь!

Private anOldValue As Variant

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count = 1 Then
    Select Case Target.Value
        Case Is = "enrolled"
            If Target.Value = anOldValue Then
               MsgBox "Student already enrolled!"
            Else 'code that needs to happen when "enrolled" is selected
               Target.Interior.ColorIndex = 10
            End If
        Case Is = "waitlisted"
            If Target.Value = anOldValue Then
                MsgBox "Student already waitlisted!"
            Else  'code that needs to happen when "waitlisted" is selected
               Target.Interior.ColorIndex = 20
            End If

        Case Is = "cancelled"
            If Target.Value = anOldValue Then
                MsgBox "Student already cancelled!"
            Else   'code that needs to happen when "cancelled" is selected
                Target.Interior.ColorIndex = 30

            End If
    End Select
End If

End Sub



Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Cells.Count = 1 Then

    anOldValue = Target.Value

End If

End Sub
1 голос
/ 12 апреля 2019

Если вы используете что-то вроде приведенного ниже кода, вы можете сохранить самый последний нажатый экземпляр в именованном диапазоне, а затем проверить его на соответствие введенному пользователем.Очевидно, это идет в соответствующем коде листа.

Private anOldValue As Variant

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count = 1 Then

    If Target.Value = anOldValue Then

        MsgBox "Same value!"
    End If
End If

End Sub



Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Cells.Count = 1 Then

    anOldValue = Target.Value

End If

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