Excel:或者更改单元格颜色作为单元格值更改

我开发了一个Excel实时数据馈送(RTD)来监控股票价格。
我想find一种方法来改变价格变化的单元格的颜色。

例如,当价格改变时,一个最初为绿色的单元格会变成红色(新的价格通过它包含的RTD公式发生),然后在新价格到达时变回绿色,等等。

也许这可以让你开始? 当实时数据被刷新时,我提出了一个事件。 概念是将实时数据存储在variables中,并检查它是否已经改变

Dim rtd As String Private Sub Worksheet_SelectionChange(ByVal Target As Range) With ActiveSheet.Range("A1") If .Value <> rtd Then Select Case .Interior.ColorIndex Case 2 .Interior.ColorIndex = 3 Case 3 .Interior.ColorIndex = 4 Case 4 .Interior.ColorIndex = 3 Case Else .Interior.ColorIndex = 2 End Select Else .Interior.ColorIndex = 2 End If rtd = .Value End With End Sub 
 Sub Worksheet_Change(ByVal ChangedCell As Range) ' This routine is called whenever the user changes a cell. ' It is not called if a cell is changed by Calculate. Dim ColChanged As Integer Dim RowChanged As Integer ColChanged = ChangedCell.Column RowChanged = ChangedCell.Row With ActiveSheet If .Cells(RowChanged, ColChanged).Interior.ColorIndex = 19 Then ' Changed cell is red. Set it to green. .Cells(RowChanged, ColChanged).Interior.ColorIndex = 19 Else ' Changed cell is not red. Set it to red. .Cells(RowChanged, ColChanged).Interior.ColorIndex = 19 End If End With End Sub 

此解决scheme重新发布到一个Calculation事件。 我不完全确定一个RTD更新是否触发了这个,所以你需要尝试一下。

将此代码添加到包含您的RTD调用的Worksheet模块。

它将上一次计算的表单数据的副本保留在内存中,并在每个计算中比较新的值。
它将其操作限制在包含公式的单元格中。

 Option Explicit Dim vData As Variant Dim vForm As Variant Private Sub Worksheet_Calculate() Dim vNewData As Variant Dim vNewForm As Variant Dim i As Long, j As Long If IsArray(vData) Then vNewData = Me.UsedRange vNewForm = Me.UsedRange.Formula For i = LBound(vData, 1) To UBound(vData, 1) For j = LBound(vData, 2) To UBound(vData, 2) ' Change this to match your RTD function name If vForm(i, j) Like "=YourRTDFunction(*" Then If vData(i, j) <> vNewData(i, j) Then With Me.Cells(i, j).Interior If .ColorIndex = 3 Then .ColorIndex = 4 Else .ColorIndex = 3 End If End With End If End If Next j, i End If vData = Me.UsedRange vForm = Me.UsedRange.Formula End Sub 

前面的答案都假设实时数据馈送触发工作表事件。 我在RTD文件中找不到任何证实或否认这个假设。 但是,如果它确实触发了工作表事件,我会认为Worksheet_Change会是最有用的,因为它标识了一个已更改的单元。

以下可能值得尝试。 它必须放在相关工作表的代码区域。

 Option Explicit Sub Worksheet_Change(ByVal ChangedCell As Range) ' This routine is called whenever the user changes a cell. ' It is not called if a cell is changed by Calculate. Dim ColChanged As Integer Dim RowChanged As Integer ColChanged = ChangedCell.Column RowChanged = ChangedCell.Row With ActiveSheet If .Cells(RowChanged, ColChanged).Font.Color = RGB(255, 0, 0) then ' Changed cell is red. Set it to green. .Cells(RowChanged, ColChanged).Font.Color = RGB(0, 255, 0) Else ' Changed cell is not red. Set it to red. .Cells(RowChanged, ColChanged).Font.Color = RGB(255, 0, 0) End If End With End Sub 

我正在寻找相同的。 我的情况就像当从列表中select值时更改单元格的颜色。 每个列表项对应一种颜色。

最终为我工作的是:

 Private Sub Worksheet_Change(ByVal Target As Range) Set MyPlage = Range("B2:M50") For Each Cell In MyPlage Select Case Cell.Value Case Is = "Applicable-Incorporated" Cell.Font.Color = RGB(0, 128, 0) Case Is = "Applicable/Not Incorporated" Cell.Font.Color = RGB(255, 204, 0) Case Is = "Not Applicable" Cell.Font.Color = RGB(0, 128, 0) Case Else Cell.EntireRow.Interior.ColorIndex = xlNone End Select Next ActiveWorkbook.Save End Sub