正如 John Bustos 所说,您需要另一列容纳previous value
单元格的。这个值是必要的,以便进行比较以辨别目标现在是更高还是更低。
为了实现flash,您需要在代码中设置暂停而不冻结主UI。此代码未经过测试或保证可以按您的意愿工作,但它应该是一个很好的起点。
代码
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) 并双击 Sheet 1,然后粘贴上面的代码。现在,当您更改目标范围内B1:B27
的值时,您会注意到一个值被放置在 column 中E
。5
您可以通过将in替换为Cells(Target.Row, 5).Value
您想要的任何列来更改上面的代码。
现在随着值的增加或减少,单元格将闪烁以反映变化。
该Pause
功能在此 SO Post上找到。