2013-11-28 86 views
2

有沒有一種方法可以在更改值時更改宏,而不一定當用戶更改該值時?單元格值更改時自動運行宏(未由用戶更改)

例如,我有一個連接於細胞「A1」的複選框。當複選框被選中時,A1未被選中時讀取「TRUE」,它讀取「FALSE」。當A1在TRUE和FALSE之間變化時,我想要一個宏運行。

我所見過的私人小組Worksheet_Change代碼,但似乎當用戶實際更改單元格A1只工作。是否有另一種自動運行宏的方法?

UPDATE 13年11月29日 謝謝大家對你的建議,但不幸的是這是不太工作了。讓我試着進一步擴大。

我有一個複選框,下拉列表和文本字段的用戶表單。來自用戶表單的所有數據彙總在工作表的B列中(這是所有用戶表單字段鏈接的地方)。當宏運行時,會發生一些計算,並且用戶得到一些數字。

當用戶更改用戶窗體中的內容時,我希望宏自動運行。我知道這有可能成爲資源密集型的,但當它涉及到它時我會處理這個問題。我想要一個過程說明如果B1:B20範圍內的任何單元格的值發生變化,然後運行宏。我相信這種方法比告訴每個用戶表單域運行相同的宏更容易,因爲稍後可以更容易地展開和更新此表單,特別是在其他人接管維護的情況下。

我可以有一個按鈕,用戶可以點擊運行,當他們完成填表宏,但由於用戶忘記重新計算,我可以預見不準確的信息;這就是爲什麼我想自動完成並且實時更新數字的原因。

+1

'有宏更改時值改變了嗎?爲什麼不點擊複選框觸發它? – pnuts

+0

當公式更改單元格時,[VBA代碼不能運行]的可能重複(http://stackoverflow.com/questions/11406628/vba-code-doesnt-run-when-cell-is-changed-by- a-formula) –

+0

@Sid建議的重複Q處理由於公式引起的更改,並且您的答案顯示爲「Worksheet_Calculate」。不幸的是,由於鏈接複選框導致的單元格更改也不會觸發此事件。 –

回答

0

從我可以告訴你,必須枚舉,可以在任一單元格變化而變化或行爲的細胞。這是一個示例函數。

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$A$1" or Target.Address = "$A$2" Then 
     Sheet1.Range("A3").Interior.Color = RGB(255, 0, 0) 
    End If 
End Sub 
+0

當用戶_更改單元格時,會觸發'Worksheet_Change'。該OP特別聲明他希望檢測到任何原因的更改,所以此答案對他無效。 –

-1

Worksheet_Change總是有效,但您需要具有application.enableevents = true或它不會。 但我不喜歡,如果target.address一部分,我喜歡:

Private Sub Worksheet_Change(ByVal Target As Range) 
select case target.address 'or target.row, column... 
    case "$A$1" 
    application.enableevents=false 'or the change sub will trigger again on changes! 
    code 
    application.enableevents=true 
    case "$A$2" 
    application.enableevents=false 'or the change sub will trigger again on changes! 
    code 
    application.enableevents=true 
end select 
end sub 
0

使用「Application.Volatile」在您的VBA函數的第一行

Function A() 
    Application.Volatile 


End Function 
相關問題