细胞值增加时呈绿色闪烁,减少时呈红色

时间:2013-03-15 12:52:12

标签: excel excel-vba colors cells vba

我的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

感谢您的帮助

2 个答案:

答案 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函数。