簡體   English   中英

單元格值更改時自動運行宏(用戶未更改)

[英]Run macro automatically when cell value changed (not changed by user)

有沒有辦法在更改值時更改宏,而不必在用戶更改值時更改?

例如,我有一個鏈接到單元格“A1”的復選框。 選中復選框時,A1 顯示為“TRUE”,未選中時顯示為“FALSE”。 當 A1 在 TRUE 和 FALSE 之間變化時,我希望運行一個宏。

我已經看到了 Private Sub Worksheet_Change 代碼,但這似乎只有在用戶實際更改單元格 A1 時才有效。 還有另一種方法可以自動運行宏嗎?

2013 年 11 月 29 日更新感謝大家的建議,但不幸的是它並沒有完全奏效。 讓我嘗試進一步擴展。

我有一個帶有復選框、下拉列表和文本字段的用戶表單。 來自用戶表單的所有數據都匯總在工作表的 B 列中(所有用戶表單字段都在這里鏈接)。 當宏運行時,會發生一些計算,用戶會得到一些數字。

當用戶更改用戶表單中的某些內容時,我希望宏自動運行。 我知道這可能會成為資源密集型的問題,但是當涉及到這個問題時,我會處理這個問題。 我想要一個程序,說明如果 B1:B20 范圍內的任何單元格的值發生變化,然后運行宏。 我相信這種方法比告訴每個用戶表單字段運行相同的宏更容易,因為以后擴展和更新這個表單會更容易,特別是如果其他人接管維護。

我可以有一個按鈕,用戶可以在填寫完表單后單擊它來運行宏,但是我可以預見不准確的信息,因為用戶忘記重新計算; 這就是為什么我希望它自動完成並實時更新數字。

據我所知,您必須枚舉可以更改的單元格或對任何單元格更改采取行動。 這是一個示例函數。

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

在 VBA 函數的第一行使用“Application.Volatile”

Function A()
    Application.Volatile


End Function

Worksheet_Change 始終有效,但您需要具有 application.enableevents=true 否則它不會。 但我不喜歡 if 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM