每当另一个单元格中的值发生更改时,Excel / VBA更新单元格

时间:2016-08-03 13:06:19

标签: excel vba

我对VBA很新。我在工作表中有一个实时更新值的单元格。价值每月变化一次。有没有办法让我记录相邻单元格中值的变化? 例如, 如果A1中的值今天从5变为6,我只想在今天的A2中记录日期。

我真的不需要记录以前的变化。

非常感谢你!

4 个答案:

答案 0 :(得分:2)

如果您在单元格 A1 中使用Bloomberg功能,例如 BDP() BDH() BDS()< / em>,然后您可以使用Worksheet_Calculate()事件宏来检测该单元格中的更改。

在这个例子中,我使用单元格 A3 作为&#34;内存&#34;为了避免过于频繁地重新发布日期:

Private Sub Worksheet_Calculate()
    Application.EnableEvents = False
        If [A1] <> [A3] Then
            [A3] = Range("A1").Value
            [A2] = Date
            MsgBox "Date recorded"
        End If
    Application.EnableEvents = True
End Sub

答案 1 :(得分:1)

当工作表上的某些内容更改其值时会触发Worksheet_Change(),因此请将这样的内容添加到Sheet-Codemodule中:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$A$1" Then

    Debug.Print "A1 has been changed!"
    'do something
End If
End Sub

答案 2 :(得分:1)

<强> 更新

您似乎也需要计算事件,因为您正在使用公式。你可以尝试这样的事情:

Private Sub Worksheet_Calculate()

    Application.EnableEvents = False

    ActiveSheet.Calculate
    DoEvents

    With Range("A1")
        .Value = .Value
        DoEvents
    End With

    Application.EnableEvents = True

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$A$1" Then
        Range("A2").Value = Date
    End If

End Sub

答案 3 :(得分:0)

您可以使用Worksheet_SelectionChange事件。我想这取决于你在工作表中做了什么,以及它是否会触发。 您必须将A1中的值与之前存储在另一个单元格中的A1中的值进行比较。