我需要什么:要触发的宏,每当单元格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
答案 0 :(得分:0)
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
希望这对我遇到的情况有帮助!