您可以更改您的更改事件以查找F1正在查看的单元格。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Or Target.Address = "$B$2" Then
MsgBox "You changed THE CELL!"
End If
End Sub
这是非常合情合理的,因为这实际上是要更改的细胞,我抓住了这个从线when I add a new value in the date column that causes the calculation in cell F1 to update
Alternativly如果您的公式引用将改变你可以使用下面的代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
For Each r In Range("F1").Precedents
If Target.Address = r.Address Then
MsgBox "You changed THE CELL!"
Exit For
End If
Next r
End Sub
上面的代码会做什么:只要工作表中的任何单元格发生更改,它就会转到单元格F1,然后查看被更改的单元格是否是F1用于计算的单元格之一,如果它不是我如果是的话,它不会做任何事情,它会触发msgbox。
UPDATE:另一种选择,将在所有的纸张的工作,以查看是否任何改变单元被依赖于由公式的单元格F1的内侧Sheet 1上,当细胞是在另一页上可以在下面找到。
Public Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)
On Error GoTo NextStep
Dim r As Range
For Each r In Sheets("SheetF1IsOn").Range("F1").Precedents
If Target.Address = r.Address Then
MsgBox "You changed THE CELL!"
Exit For
Exit Sub
End If
Next r
NextStep:
If InStr(Replace(Sheets("SheetF1IsOn").Range("F1").Formula, "'", ""), sh.Name + "!" + Target.Address) _
Or InStr(Replace(Sheets("SheetF1IsOn").Range("F1").Formula, "'", ""), sh.Name + "!" + Target.Address(False)) _
Or InStr(Replace(Sheets("SheetF1IsOn").Range("F1").Formula, "'", ""), sh.Name + "!" + Target.Address(, False)) _
Or InStr(Replace(Sheets("SheetF1IsOn").Range("F1").Formula, "'", ""), sh.Name + "!" + Target.Address(False, False)) > 0 Then
MsgBox "You changed THE CELL!"
End If
End Sub
如果需要工作两者上的其他片材和当前片,那么你将不得不增加另一个如果测试式中的目标,然后查看是否它是通过在工作簿中的片材的名称之前和!
UPDATE2:上述两个都略有瑕疵(如Simoco指出)的最后一件事我可以想出是使用公共变量,设置你的细胞,每个的价值计算工作表的时间以测试值是否更改。 (如果做一整列,你可能需要暗淡的集合或阵列测试反对)
所以你内心的工作模块,用以下内容替换原来的代码:
Option Explicit
Public F1ValueOld As Variant
Private Sub Worksheet_Calculate()
If Range("F1").Value <> F1ValueOld Then
MsgBox "You changed THE CELL!"
F1ValueOld = Range("F1").Value
End If
End Sub
这将同时工作簿工作是开放的,但你会得到一个错误,当您关闭并重新打开工作簿,所以里面的工作簿模块添加以下代码也:
Private Sub Workbook_Open()
F1ValueOld = Sheets("SheetF1IsOn").Range("A1").Value
End Sub
这应该没有完成你正在尝试什么。
将'Worksheet_Change'更改为'Worksheet_Calculate' –
+1,不错,正在寻找像这样的东西我自己 – Pedrumj
当我使用Calculate代替Change时,出现编译错误。 “过程声明与具有相同名称的事件或过程的描述不匹配” - 任何建议? – DLittlejohn412