2015-05-01 76 views
0

請在嘗試幾個小時後自己嘗試一下。在Excel中根據單元格值更改功能運行VBA代碼

我有這個代碼來運行單元格值更改的代碼庫,但只有在我輸入自己的更改時纔有效。

我需要自動使用單元格內部的函數,但是我可以正確使用它。

這是我的代碼,現在以及手動工作:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$A$1" Then 
     Application.EnableEvents = False 
     Range("D10").Select 
     Selection.ClearContents 
     Application.EnableEvents = True 
    End If 
End Sub 

凡是我要補充,使其自動與裏面的公式?

+0

這是非常含糊的...... A1是您的示例中的公式正在更改的單元格,還是具有公式的單元格?多一點信息將有所幫助。 – 314UnreadEmails

回答

0

這是一個棘手的問題,因爲沒有內置的工作表事件,當特定單元格由於公式而具有值更改時觸發。但是,有一個可以使用的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這些單元格。

相關問題