正如約翰布斯托斯所說,你需要另一列內容的單元格previous value
。這個值是必要的,以便進行比較以辨別目標是否更高或更低。
爲了實現Flash,您需要在代碼中設置暫停而不凍結主UI。此代碼沒有經過測試或無法保證按您的要求工作,但它應該是一個非常好的起點。
CODE
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。
來源
2013-03-15 15:18:25
Sam
有些東西在下面沒有提到,如果你不想爲以前的值創建輔助列,你可以在'Worksheet_Change'事件中使用'Application.Undo'來獲取單元格的前一個值,然後使用'.Redo ',並且比較兩者。如果'Worksheet_Change'範圍大於一個單元格(即粘貼操作)或者導致我的宏更改單元格,請注意,在這種情況下,撤消歷史記錄通常會被禁用。 – Alain 2013-03-15 19:40:20