单元格值增加时呈绿色闪烁,减少时呈红色

问题描述 投票:0回答:3

我的 Excel 工作表中有一个提要,并且希望如果值分别向上或向下变化,单元格会闪烁绿色/红色。有人可以帮忙吗?谢谢。

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

感谢您的帮助

excel colors cells vba
3个回答
0
投票

...你不能真正让它闪烁,但你可以改变阴影...

我的方法是,在工作簿中未使用的地方创建一组单元格来存储单元格的旧值(您可以在

Worksheet_Change
事件中设置这些单元格),然后只需创建单元格的条件格式规则,用于将单元格的值与辅助单元格的值进行比较 - 如果较大,则阴影 = 绿色,如果较小,则 sahding = 红色。

希望这是有道理的。


0
投票

正如 John Bustos 所说,您需要另一根柱子来容纳单元格的

previous value
。为了进行比较以辨别目标现在是更高还是更低,这个值是必要的。

为了实现闪现,需要在代码中设置暂停,但不能冻结主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
内的值时,您会注意到一个值将放置在
E
列中。您可以在上面的代码中更改此设置,方法是将
5
中的
Cells(Target.Row, 5).Value
替换为您想要的任何列。

现在,随着值的增加或减少,单元格将闪烁以反映变化。

Pause
功能是在this SO Post上找到的。


0
投票

在谷歌表格中可以吗?

© www.soinside.com 2019 - 2024. All rights reserved.