您可以更改您的更改事件以查找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