Excel 当单元格结果按公式更改时运行宏–;但是一个不需要的宏重新触发的问题
我有一个问题与另一个问题“当单元格结果按公式更改时运行宏”中提供的信息有关,我被要求创建一个新问题。我还阅读了“当单元格更改时excel VBA自动运行宏”中的答复https://stackoverflow.com/questions/38083021/excel-vba-run-macro-automatically-when-a-cell-is-changed 但我很难为我想要实现的目标找到不同的答案/片段 如果单元格C3中的公式=1,我在下面添加的代码示例将触发宏_01 如果C3中的公式给出C3从1更改为2,则会触发宏_02 C3中的单元格公式是只有两个可能值的IF语句,即1或2 我遇到的问题是,每当工作表中的任何其他值/单元格更新(自动或手动)时,宏_01或宏_02也会重新触发(一次又一次…)——这不是我想要的 例如:如果C3中的If公式变为1(以前为2),宏_01将正确触发,但如果值1保留在单元格C3中,因为If语句未更改,并且更新或重新计算了另一个完全不相关的单元格-例如单元格E12 have=RAND()+9,然后按Enter键–然后单元格E12将更新,宏_01将再次触发–我不希望在单元格C3没有更改的情况下触发宏_01 请注意,如果您(作为测试)改为在单元格C3中手动输入值5或文本“hello”,则当工作表中的其他内容更新时,VBA代码将不会再次触发。我的假设/问题是,C3中的公式每次作为公式时都会触发 下面的示例代码将触发两个不同的宏,其中宏\u 01将在一秒钟后在单元格A3中输入文本“Hi\u 01”,然后输入“There\u 01”,或者宏\u 02将在同一单元格A3中输入“Hi\u 02”,然后输入“There\u 02” 测试设置: 打开一个空的Excel Sheet1并输入:Excel 当单元格结果按公式更改时运行宏–;但是一个不需要的宏重新触发的问题,excel,triggers,formula,Excel,Triggers,Formula,我有一个问题与另一个问题“当单元格结果按公式更改时运行宏”中提供的信息有关,我被要求创建一个新问题。我还阅读了“当单元格更改时excel VBA自动运行宏”中的答复https://stackoverflow.com/questions/38083021/excel-vba-run-macro-automatically-when-a-cell-is-changed 但我很难为我想要实现的目标找到不同的答案/片段 如果单元格C3中的公式=1,我在下面添加的代码示例将触发宏_01 如果C3中的公式给
Option Explicit
Public TargetValue As Variant
Private Const cTarget As String = "C3"
Sub TargetCalc(ws As Worksheet)
If ws.Range(cTarget) = 1 Then
Application.EnableEvents = False
Macro_01
TargetValue = ws.Range(cTarget).Value
Application.EnableEvents = True
ElseIf ws.Range(cTarget) = 2 Then
Application.EnableEvents = False
Macro_02
TargetValue = ws.Range(cTarget).Value
Application.EnableEvents = True
End If
End Sub
Sub TargetStart()
TargetValue = Sheet1.Range(cTarget).Value
End Sub
Sub Macro_01()
'
Range("A3").Select
ActiveCell.FormulaR1C1 = "Hi_01"
Application.Wait Now + TimeValue("0:00:01")
ActiveCell.FormulaR1C1 = "There_01"
End Sub
Sub Macro_02()
'
Range("A3").Select
ActiveCell.FormulaR1C1 = "Hi_02"
Application.Wait Now + TimeValue("0:00:01")
ActiveCell.FormulaR1C1 = "There_02"
End Sub
Option Explicit
Private Sub Worksheet_Calculate()
TargetCalc Me
End Sub
此工作簿
Option Explicit
Private Sub Workbook_Open()
TargetStart
End Sub
表1
Option Explicit
Public TargetValue As Variant
Private Const cTarget As String = "C3"
Sub TargetCalc(ws As Worksheet)
If ws.Range(cTarget) = 1 Then
Application.EnableEvents = False
Macro_01
TargetValue = ws.Range(cTarget).Value
Application.EnableEvents = True
ElseIf ws.Range(cTarget) = 2 Then
Application.EnableEvents = False
Macro_02
TargetValue = ws.Range(cTarget).Value
Application.EnableEvents = True
End If
End Sub
Sub TargetStart()
TargetValue = Sheet1.Range(cTarget).Value
End Sub
Sub Macro_01()
'
Range("A3").Select
ActiveCell.FormulaR1C1 = "Hi_01"
Application.Wait Now + TimeValue("0:00:01")
ActiveCell.FormulaR1C1 = "There_01"
End Sub
Sub Macro_02()
'
Range("A3").Select
ActiveCell.FormulaR1C1 = "Hi_02"
Application.Wait Now + TimeValue("0:00:01")
ActiveCell.FormulaR1C1 = "There_02"
End Sub
Option Explicit
Private Sub Worksheet_Calculate()
TargetCalc Me
End Sub
您需要测试该值是否已更改
如果ws.Range(cTarget)TargetValue,则
Application.EnableEvents=False
选择案例ws.Range(cTarget.Value)
案例1
宏_01
案例2
宏_02
结束选择
TargetValue=ws.Range(cTarget.Value)
Application.EnableEvents=True
如果结束
您还应该阅读我用您的答案更新了代码-现在它工作正常。非常感谢!