想請問Worksheet_Change觸發的特性是只能更改該儲存格嗎?
例如A1<100 就會觸發,但在儲存格中設定A1=A2,在儲存格A2=10時則無法觸發,請問如何改成在A2輸入10也會觸發呢?
附上簡易的程式碼,麻煩各位前輩解答。
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False '暫時停止事件觸發
If Target.Column = 1 And Target.Row = 1 Then
ThisRow = Target.Row
If Target.Value < 100 Then
Range("B1").ClearContents
MsgBox ("hello")
Else
Range("B1") = "無"
End If
End If
Application.EnableEvents = True '啟用事件觸發
End Sub
其實是有觸發的
是你自己寫的這列
某種程度上限制「只有A1改變才觸發」的現象
If Target.Column = 1 And Target.Row = 1 Then
改成以下這樣
看看合不合用
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False '暫時停止事件觸發
' If Target.Column = 1 And Target.Row = 1 Then
' ThisRow = Target.Row
' If Target.Value = 1 Then
If Range("A1").Value = 1 Then
Range("B1").ClearContents
MsgBox ("hello")
Else
Range("B1") = "無"
End If
' End If
Application.EnableEvents = True '啟用事件觸發
End Sub
補充說明
當你修改 A2 時,Worksheet_Change 傳進來的 Target 是A2
所以你的** Colume=1 和 Row=1 **是不符合條件的
以致你以下寫的程式都不會被執行
咦
是不是改題目了
還好 Excel 還沒刪掉
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False '暫時停止事件觸發
' If Target.Column = 1 And Target.Row = 1 Then
' ThisRow = Target.Row
' If Target.Value = 1 Then
If Range("A1").Value < 100 Then
Range("B1").ClearContents
MsgBox ("hello")
Else
Range("B1") = "無"
End If
' End If
Application.EnableEvents = True '啟用事件觸發
End Sub
抱歉,怕誤會所以題目有做修改
故意要限制在A1的,不然這樣變成全域觸發,造成子程式會有些問題
需求舉例來說:初始儲存格設定為"A1"="A2",而儲存格A2=3,故儲存格A1=3,經過數據篩選後的結果會回傳給儲存格A2,A2=1,故A1也變為1,理論上A1從3變成1,應該要觸發的,但卻沒有回應
當你使用 Worksheet_Change 時
就已經是全域觸發了
另外常見的是 Worksheet_Caculate
如果 Worksheet_Change 是儲存格的「值」改變
那麼 Worksheet_Caculate 就是儲存格的「公式」有重新計算過
如果以上兩個都不符你的要求
那我也不會了
要靠別的高手出馬了
海大,可以問一下上面的程式碼可以直接改成Caculate嗎? 因為Caculate能參考的範例我這邊比較少,大大能幫忙一下嗎?
當然可以,但對你的意義不大
Caculate 連 Target 這個參數都沒有
根本無從判斷是那一個儲存格有變動
Private Sub Worksheet_Caculate
Application.EnableEvents = False '暫時停止事件觸發
' If Target.Column = 1 And Target.Row = 1 Then
' ThisRow = Target.Row
' If Target.Value = 1 Then
If Range("A1").Value = 1 Then
Range("B1").ClearContents
MsgBox ("hello")
Else
Range("B1") = "無"
End If
' End If
Application.EnableEvents = True '啟用事件觸發
End Sub
是吧