How can I run VBA code each time a cell gets its value changed by a formula?

后端 未结 4 973
清酒与你
清酒与你 2020-11-28 10:46

How can I run a VBA function each time a cell gets its value changed by a formula?

I\'ve managed to run code when a cell gets its value changed by the user, but it d

4条回答
  •  渐次进展
    2020-11-28 11:39

    Here is my code:

    I know it looks terrible, but it works! Of course there are solutions which are much better.

    Description of the code:

    When the Workbook opens, the value of the cells B15 till N15 are saved in the variable PrevValb till PrevValn. If a Worksheet_Calculate() event occurs, the previous values are compared with the actual values of the cells. If there is a change of the value, the cell is marked with red color. This code could be written with functions, so that he is much shorter and easier to read. There's a color-reset-button (Seenchanges), which resets the color to the previous color.

    Workbook:

    Private Sub Workbook_Open()
    PrevValb = Tabelle1.Range("B15").Value
    PrevValc = Tabelle1.Range("C15").Value
    PrevVald = Tabelle1.Range("D15").Value
    PrevVale = Tabelle1.Range("E15").Value
    PrevValf = Tabelle1.Range("F15").Value
    PrevValg = Tabelle1.Range("G15").Value
    PrevValh = Tabelle1.Range("H15").Value
    PrevVali = Tabelle1.Range("I15").Value
    PrevValj = Tabelle1.Range("J15").Value
    PrevValk = Tabelle1.Range("K15").Value
    PrevVall = Tabelle1.Range("L15").Value
    PrevValm = Tabelle1.Range("M15").Value
    PrevValn = Tabelle1.Range("N15").Value
    End Sub
    

    Modul:

    Sub Seenchanges_Klicken()
    Range("B15:N15").Interior.Color = RGB(252, 213, 180)
    End Sub
    

    Sheet1:

    Private Sub Worksheet_Calculate()
    If Range("B15").Value <> PrevValb Then
        Range("B15").Interior.Color = RGB(255, 0, 0)
        PrevValb = Range("B15").Value
    End If
    If Range("C15").Value <> PrevValc Then
        Range("C15").Interior.Color = RGB(255, 0, 0)
        PrevValc = Range("C15").Value
    End If
    If Range("D15").Value <> PrevVald Then
        Range("D15").Interior.Color = RGB(255, 0, 0)
        PrevVald = Range("D15").Value
    End If
    If Range("E15").Value <> PrevVale Then
        Range("E15").Interior.Color = RGB(255, 0, 0)
        PrevVale = Range("E15").Value
    End If
    If Range("F15").Value <> PrevValf Then
        Range("F15").Interior.Color = RGB(255, 0, 0)
        PrevValf = Range("F15").Value
    End If
    If Range("G15").Value <> PrevValg Then
        Range("G15").Interior.Color = RGB(255, 0, 0)
        PrevValg = Range("G15").Value
    End If
    If Range("H15").Value <> PrevValh Then
        Range("H15").Interior.Color = RGB(255, 0, 0)
        PrevValh = Range("H15").Value
    End If
    If Range("I15").Value <> PrevVali Then
        Range("I15").Interior.Color = RGB(255, 0, 0)
        PrevVali = Range("I15").Value
    End If
    If Range("J15").Value <> PrevValj Then
        Range("J15").Interior.Color = RGB(255, 0, 0)
        PrevValj = Range("J15").Value
    End If
    If Range("K15").Value <> PrevValk Then
        Range("K15").Interior.Color = RGB(255, 0, 0)
        PrevValk = Range("K15").Value
    End If
    If Range("L15").Value <> PrevVall Then
        Range("L15").Interior.Color = RGB(255, 0, 0)
        PrevVall = Range("L15").Value
    End If
    If Range("M15").Value <> PrevValm Then
        Range("M15").Interior.Color = RGB(255, 0, 0)
        PrevValm = Range("M15").Value
    End If
    If Range("N15").Value <> PrevValn Then
        Range("N15").Interior.Color = RGB(255, 0, 0)
        PrevValn = Range("N15").Value
    End If
    End Sub
    

提交回复
热议问题