VBA宏改变值改变1秒的单元格的颜色

时间:2016-03-30 11:53:10

标签: excel vba excel-vba macros

我正在研究Excel Project,我正在处理正在变化的价格,并且是从E和F列的外部来源获取的。

我想要的是:

  1. 当这些单元格更改值时,我希望它们将其颜色从橙色更改为白色,或将单元格背景更改为白色
  2. 我希望这只发生1秒或更短时间,并恢复原始单元格颜色或背景颜色
  3. 通过这种方式,我可以在变化时关注价格。

    这可能吗?

    请帮忙。感谢

1 个答案:

答案 0 :(得分:2)

当E或F列中的任何单元格发生变化时,将其添加到您希望它应用于(而不是单独的模块中)的工作表的代码中,以进行1秒的颜色更改:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("E:F")) Is Nothing Then
        Target.Interior.ColorIndex = 2
        Application.Wait (Now + #0:00:01#)
        Target.Interior.ColorIndex = 46
    End If
End Sub

或者对于不到1秒的更改,请使用下面的版本,因为application.wait不能处理超过1秒的时间,但是timer会这样做。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("E:F")) Is Nothing Then
        Dim x As Single
        x = Timer
            While Timer - x < 0.5
                Target.Interior.ColorIndex = 2
            Wend
                Target.Interior.ColorIndex = 46
    End If
End Sub

ColorIndex值适用于白色和默认橙色。要更改为您要查找的特定颜色,请参阅http://dmcritchie.mvps.org/excel/colors.htm

编辑 - 下面的新答案。上面的原始答案。

好的,这是一个混乱的方式,但应该达到你想要做的。

将其粘贴到模块中,调整1到10以覆盖您正在观察更改的单元格数量:

Public val(1 To 10) As Variant

将此粘贴​​到您的ThisWorkbook代码区域,调整单元格引用,以便您正在观看的每个引用都包含在正确的升序中(列E从最低到最高,然后列F从最低到最高):

Private Sub Workbook_Open()
    val(1) = Sheet1.Range("E1").Value
    val(2) = Sheet1.Range("E2").Value
    val(3) = Sheet1.Range("E3").Value
    val(4) = Sheet1.Range("E4").Value
    val(5) = Sheet1.Range("E5").Value
    val(6) = Sheet1.Range("F1").Value
    val(7) = Sheet1.Range("F2").Value
    val(8) = Sheet1.Range("F3").Value
    val(9) = Sheet1.Range("F4").Value
    val(10) = Sheet1.Range("F5").Value
End Sub

最后,将其粘贴到工作表的代码区域,其中包含您正在观看更改的值,再次调整范围以适合您的观看范围:

Private Sub Worksheet_Calculate()
Dim x As Single, colIndx As Integer
i = 1

    For Each cell In Range("E1:E5")
        If cell.Value <> val(i) Then
            colIndx = cell.Interior.ColorIndex
            x = Timer
            While Timer - x < 0.5
                cell.Interior.ColorIndex = 2
            Wend
            cell.Interior.ColorIndex = colIndx
            val(i) = cell.Value
        End If
        i = i + 1
    Next cell

    For Each cell In Range("F1:F5")
        If cell.Value <> val(i) Then
            colIndx = cell.Interior.ColorIndex
            x = Timer
            While Timer - x < 0.5
                cell.Interior.ColorIndex = 2
            Wend
            cell.Interior.ColorIndex = colIndx
            val(i) = cell.Value
        End If
        i = i + 1
    Next cell
End Sub

最后保存并关闭工作簿并重新打开它,希望颜色应随值更新。