2016-03-30 122 views
0

我的工作在Excel的项目和我处理正在改变生活和E列从外部源采取的价格和F.VBA宏更改单元格的颜色更改值1秒

我要的是:

  1. 当这些细胞变化值,我希望他们能够从橙色改变其颜色,以让说白,或更改单元格背景,以白色
  2. 我希望这种情况发生仅1秒或更少,并恢复原来的单元格颜色或背景颜色

这样我可以保持我的眼睛,当他们改变价格。

这可能吗?

请帮忙。感谢

回答

2

添加到这一点,你希望它应用到(而不是在一个单独的模块)为1秒的颜色变化时,在列E或F的任何细胞改变工作表的代码:

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代码区这一点,调整单元格引用所以每REF你看包括在正确的升序(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 

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

+0

非常感谢您的帮助。我添加了代码,但它似乎只在单击单元格并更改其颜色时才起作用。当它自动更新新的价格它似乎不工作。 – JustSomeExcelVbathings

+0

工作表更改事件仅在工作表上的实际值更改时触发。我认为你的价值观是通过某种公式自动更新的?如果你可以在价格价值更新的机制上发布一些细节,我可以看到是否还有另一种方法可以考虑改变这些变化。 –

+0

是的,有一个公式用于从列标题和返回确切价格的值。所以,公式不会改变,只有值。如果我在E10列上写公式,例如this = A10也是一样。如果我在a10上编写,让我们说1000,并将其更改为1500,则E10上不会发生任何事情。值会改变,但背景颜色不会。 – JustSomeExcelVbathings