這是一個棘手的問題,因爲沒有內置的工作表事件,當特定單元格由於公式而具有值更改時觸發。但是,有一個可以使用的Worksheet.Calculate事件。
首先我們創建一個全局字符串變量。這是一個在子程序或函數之外聲明的變量。它將在執行子程序和函數之間保持它的價值。所以我們將聲明它,然後在A1改變時將它設置爲A1的值。
Dim lastValue As String
Private Sub Worksheet_Calculate()
If Range("A1").Value <> lastValue Then
lastValue = Range("A1").Value
Range("D10").ClearContents
End If
End Sub
lastValue
這裏是我們全球,將持有的A1
最後已知值。當worksheet.calculate
被觸發,如果它改變了它會比較該值對A1
看,如果是則執行你的代碼,以清除D1
不是全局你的內容,也可以只堅持A1的那最後已知值進入一個單元格的地方。那你跟你比較一下嗎?將單元格用於全局變量的優點是,即使關閉並重新打開表單,單元格值也會保持其值。因此,根據您的需要,它可能是一個更好的選擇:
Private Sub Worksheet_Calculate()
lastValue = Range("Z10").value
If Range("A1").Value <> lastValue Then
Range("Z10").value = Range("A1").Value
Range("D10").ClearContents
End If
End Sub
在哪裏範圍Z10
就是保持最後已知值的地方。
最後,我減少了你的代碼,將D10
的內容清除爲一行。任何時候你看到Something.Select
然後在下一行看到Selection.DoSomething
你可以擺脫那個Select/Selection
位。選擇一個單元通常是隻有人類需要做的與頁面交互的東西。 VBA可以做任何喜歡的單元格,而無需使用Select
這些單元格。
這是非常含糊的...... A1是您的示例中的公式正在更改的單元格,還是具有公式的單元格?多一點信息將有所幫助。 – 314UnreadEmails