2013-03-15 26 views
1

如果值相應變化,我希望單元格在綠色/紅色閃爍時閃爍綠色/紅色。有人可以幫忙嗎?謝謝。當單元格值增加時閃爍綠色,減少時爲紅色

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 

感謝您的幫助

+0

有些東西在下面沒有提到,如果你不想爲以前的值創建輔助列,你可以在'Worksheet_Change'事件中使用'Application.Undo'來獲取單元格的前一個值,然後使用'.Redo ',並且比較兩者。如果'Worksheet_Change'範圍大於一個單元格(即粘貼操作)或者導致我的宏更改單元格,請注意,在這種情況下,撤消歷史記錄通常會被禁用。 – Alain 2013-03-15 19:40:20

回答

0

...你不能真正使閃光燈,但你可以改變陰影...

我會做的事情是這樣的,不是某個地方在工作簿中使用,創建一組將存儲單元格舊值的單元格(可以將這些單元格設置爲Worksheet_Change事件),那麼只需爲您的單元格創建條件格式規則以便將單元格的值與輔助單元的值 - 如果較大,則陰影=綠色,如果較小,則sahding =紅色。

希望這是有道理的。

0

正如約翰布斯托斯所說,你需要另一列內容的單元格previous value。這個值是必要的,以便進行比較以辨別目標是否更高或更低。

爲了實現Flash,您需要在代碼中設置暫停而不凍結主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),雙擊表1,然後將其粘貼在上述代碼。現在您會注意到,在更改目標範圍內的值B1:B27時,值將被放置在列E中。您可以在上面的代碼中更改此項,您可以將5替換爲Cells(Target.Row, 5).Value中的任意一列。

現在隨着數值的增加或減少,細胞會閃爍以反映變化。

Pause功能被發現在this SO Post

+0

您可以使用'Application.OnTime'來註冊鬧鐘以恢復原始單元格背景顏色,而不是使用'暫停'。 – kevinarpe 2016-05-09 05:21:27