VBA触发macros单元格值更改

这应该很简单。 当一个单元格的值发生变化时,我想触发一些VBA代码。 单元格(D3)是从另外两个单元格计算的=B3*C3 。 我尝试了两种方法:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 And Target.Row = 3 Then MsgBox "There was a change in cell D3" End If End Sub 

由于单元格是一个计算,所以当值发生变化时不会触发,因为计算保持不变。 我也试过:

 Private Sub Worksheet_Calculate() MsgBox "There was a calculation" End Sub 

但是我在表单上有多个计算,并且会多次触发。 有没有一种方法可以确定在计算事件中更改了哪个计算? 或者有另一种方式可以跟踪D3的变化?

你可以尝试这样的事情吗? 将公式更改为=D3AlertOnChange(B3*C3)

 Private D3OldVal As Variant Public Function D3AlertOnChange(val) If val <> D3OldVal Then MsgBox "Value changed!" D3OldVal = val D3AlertOnChange = val End Function 

或者试试

 Private Sub Worksheet_Change(ByVal Target As Range) Dim numdependences As Integer On Error Resume Next HasDependents = Target.Dependents.Count If Err = 0 Then If InStr(Target.Dependents.Address, "$D$3") <> 0 Then MsgBox "change" End If End If On Error GoTo 0 End Sub 

您需要错误控制以防您更改没有依赖项的单元格。

尝试这个:

  Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Target.Worksheet.Range("B1")) Is Nothing Then Call macro End If End Sub 

寻找单元格B1的值的变化,然后执行“macros”