Как сказал Джон Бустос, вам нужна другая колонка, в которой находится ячейка previous value
. Это значение необходимо для сравнения, чтобы различить, если цель теперь выше или ниже.
Для достижения вспышки вам необходимо установить паузу в коде без замораживания основного пользовательского интерфейса. Этот код не проверен или гарантированно работает так, как вы хотите, но он должен служить хорошей отправной точкой.
КОД
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("B1:B27")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
If Target.Value > Cells(Target.Row, 5).Value Then
'flash green
Target.Interior.ColorIndex = 10
Pause 0.5
Target.Interior.ColorIndex = 2
Pause 0.5
Target.Interior.ColorIndex = 10
ElseIf Target.Value < Cells(Target.Row, 5).Value Then
'flash red
Target.Interior.ColorIndex = 3
Pause 0.5
Target.Interior.ColorIndex = 2
Pause 0.5
Target.Interior.ColorIndex = 3
End If
Cells(Target.Row, 5).Value = Target.Value
End If
End Sub
'Pauses execution without holding up main UI thread
Public Function Pause(NumberOfSeconds As Variant)
On Error GoTo Error_GoTo
Dim PauseTime As Variant
Dim Start As Variant
PauseTime = NumberOfSeconds
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
Exit_GoTo:
On Error GoTo 0
Exit Function
Error_GoTo:
Debug.Print Err.Number, Err.Description, Erl
GoTo Exit_GoTo
End Function
Откройте редактор Visual Basic (VBE) и дважды щелкните лист 1, а затем вставьте код выше. Теперь вы заметите, как вы измените значения в пределах целевого диапазона B1:B27
значение, которое будет помещено в столбец E
. Вы можете изменить это в коде выше, заменив 5
на Cells(Target.Row, 5).Value
на любой колонтитул, который вы хотите.
Теперь, когда значения увеличиваются или уменьшаются, ячейка будет мигать, чтобы отразить изменение.
Функция Pause
была найдена на this SO Post.
Что-то не упомянутое ниже, если вы не хотите иметь вторичные столбцы для предыдущих значений, вы можете использовать 'Application.Undo' в событии' Worksheet_Change' для получения предыдущего значения ячейки, а затем '.Redo ', и сравните их. Будьте осторожны, если диапазон «Worksheet_Change» больше, чем одна ячейка (т. Е. Вставить действия) или вызвал изменение макроса моей ячейки, и в этом случае история отмены отменяется. – Alain