2013-03-11 58 views
16

有一個簡單的辦法讓Excel將自動執行宏每當小區改變?Excel的VBA宏運行時自動細胞改變

在該小區將是Worksheet("BigBoard").Range("D2")

我以爲會是一個簡單的谷歌查詢被證明是更復雜 - 每個樣本涉及相交(不管這些是)或顏色格式或其他一些事情這似乎是無關緊要的。

+0

使用Peter Albert的答案。不要害怕交叉線,這就是爲什麼VBA知道你正在監視哪些單元格的變化。並且他擁有MsgBox的地方,這就是你稱之爲宏的地方。這是最簡單的方法。的[在小區改變自動執行的Excel宏] – Dan 2013-03-11 11:12:42

+0

可能重複(http://stackoverflow.com/questions/409434/automatically-execute-an-excel-macro-on-a-cell-change) – MackM 2015-08-12 18:31:38

+1

請你標記爲你工作的答案,所以這個問題不再顯示爲未答覆?先謝謝你! – 2015-11-09 10:11:09

回答

29

是的,這可以通過使用工作表事件:

在Visual Basic編輯器中打開你的在樹中的工作表的名稱通過雙擊感興趣的(即「BigBoard」)的工作表左上角。將模塊中下面的代碼:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Intersect(Target, Me.Range("D2")) Is Nothing Then Exit Sub 
    Application.EnableEvents = False 'to prevent endless loop 
    On Error Goto Finalize 'to re-enable the events  
    MsgBox "You changed THE CELL!" 
Finalize:   
    Application.EnableEvents = True 
End Sub 
+0

非常感謝你的工作。爲了充分理解,表達如何相交(目標)...在更簡單的情況下表演? – kamelkid2 2013-03-11 11:18:54

+1

它測試D2是在細胞範圍內還是細胞發生了變化(即 - 目標的一部分)。如果不是,則代碼退出。 +1 btw – brettdj 2013-03-11 11:30:17

+2

'Insersect(rng1,rng2)'返回兩個輸入範圍「相交」的範圍。因此,如果改變的單元格和D2的交點是空的,其他的東西就會被改變,你不希望宏繼續前進。順便說一句:如果它解決了你的問題,請點擊對號將其標記爲解決方案! – 2013-03-11 11:57:20

14

另一種選擇是

Private Sub Worksheet_Change(ByVal Target As Range) 
    IF Target.Address = "$D$2" Then 
     MsgBox("Cell D2 Has Changed.") 
    End If 
End Sub 

我相信這比使用資源Intersect少,如果你的工作改變了很多,這將是有幫助的。

+0

更簡單,沒有我在選定答案中提到的錯誤。 – alej27 2017-02-26 17:18:45

4

在試圖找到一種方法,使對交叉方法的名字表陣列的靶細胞,我碰到一個簡單的方法時偶然發現在一個特定的變化片設置細胞的任何細胞或運行的東西。此代碼也放置在工作表模塊中:

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.Cells.Count > 0 Then 
'mycode here 
end if 
end sub