当单元格结果按公式更改时运行宏

时间:2019-01-17 19:41:46

标签: excel vba

我需要什么:要触发的宏,每当单元格C3返回的值不同于当前值时,就将其称为“ MacroRuns”,而不是基于其FORMULA,而不是基于手动输入一个不同的值。

我整天都在阅读和尝试Google搜索该主题的前两页上的每个“解决方案”。到目前为止,似乎没有任何内容适合我。请帮忙!!!我非常感谢!

示例:

我现在已经尝试过了,但是几次运行后它损坏了我的文件。

Private Sub Worksheet_Calculate()
    If Range("E3") <> Range("C3").Value Then
        Range("E3") = Range("B3").Value
        MsgBox "Successful"
    End If
End Sub

3 个答案:

答案 0 :(得分:0)

Module1,Sheet1(计算),ThisWorkbook(打开)

要点

  • 当工作簿打开时,C3中的值将被公开 变量TargetValue通过TargetStart
  • 在计算C3中的值时,TargetCalc被激活 如果C3中的当前值与TargetValue不同,则触发MacroRuns,并用TargetValue中的值更新C3。 / li>

代码

Module1

Option Explicit

Public TargetValue As Variant
Private Const cTarget As String = "C3"

Sub TargetCalc(ws as Worksheet)
    If ws.Range(cTarget) <> TargetValue Then
        MacroRuns
        TargetValue = ws.Range(cTarget).Value
    End If
End Sub

Sub TargetStart()
    TargetValue = Sheet1.Range(cTarget).Value
End Sub

Sub MacroRuns()
    MsgBox "MacroRuns"
End Sub

此工作簿

Option Explicit

Private Sub Workbook_Open()
    TargetStart
End Sub

Sheet1

Option Explicit

Private Sub Worksheet_Calculate()
    TargetCalc Me
End Sub

答案 1 :(得分:0)

如果我理解您的问题,可以尝试以下代码:

1)右键单击“工作表”标签,然后单击“查看代码”

2)复制此代码:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Value1 As Variant
Static Value2 As Variant

Value1 = Range("C3").value

If Value1 <> Value2 Then
   MsgBox "Cell has changed."
End If

Value2 = Range("C3").value

End Sub

我尝试了这个:

在单元格C3中的

我写了= SUM(A1:B1) 当我尝试更改此单元格中的值时,C3也更改,并且我得到了msgBox

希望这会有所帮助

答案 2 :(得分:0)

对。我要在这里添加一个块,这使我在尝试费迪南多的代码时完全感到沮丧(它本身非常简洁,谢谢费迪南多!)

主要要点是-如果您要使用的不仅仅是消息框(MsgBox“单元已更改。”),则需要在此行的上方和下方添加以下行(否则,Excel会由于崩溃而不断崩溃)无休止地尝试做同样的事情)。不要问我为什么会这样,但是我最终终于用这个解决了我的问题。所以这是几行:

If Value1 <> Value2 Then
(ADD THIS:)     Application.EnableEvents = False
                MsgBox "Cell has changed."
(I call a macro running a query from MySQL instead of MsgBox)
(AND ADD THIS:) Application.EnableEvents = True

希望这对我遇到的情况有帮助!