我的excel表格中有一个Feed,如果值分别向上或向下变化,则希望单元格闪烁绿色/红色。有人可以帮忙吗?感谢。
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
Target.Interior.ColorIndex = 36
End If
End Sub
感谢您的帮助
答案 0 :(得分:0)
...你无法让它闪现,但你可以改变阴影......
我这样做的方法是,在某个没有在工作簿中使用的地方,创建一组单元格来存储单元格的旧值(你可以在Worksheet_Change
事件中设置这些单元格),然后它就是为您的单元格创建条件格式规则,以将单元格的值与辅助单元格的值进行比较 - 如果更大,则为阴影=绿色,如果更小,则为sahding =红色。
希望这是有道理的。
答案 1 :(得分:0)
正如约翰·布斯托斯所说,你需要另一个容纳previous value
细胞的柱子。该值是必要的,以便进行比较以辨别目标是否现在更高或更低。
为了实现闪光,您需要在代码中设置暂停而不冻结主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)并双击Sheet 1,然后粘贴上面的代码。现在,当您更改目标范围B1:B27
中的值时,您会注意到要放在列E
中的值。您可以在上面的代码中更改此内容,方法是将5
中的Cells(Target.Row, 5).Value
替换为您想要的任何列。
现在,当值增加或减少时,单元格将闪烁以反映更改。
在this SO Post上找到Pause
函数。