標題:
Worksheet_SelectionChange 及 Worksheet_Change
[打印本頁]
作者:
enoch
時間:
2017-5-29 10:37
標題:
Worksheet_SelectionChange 及 Worksheet_Change
Worksheet_SelectionChange 及 Worksheet_Change
請問程式中同時使用 Worksheet_SelectionChange 及 Worksheet_Change 時
如何在更改儲存格內容時, 只觸發Worksheet_Change 事件
嘗試過在程式開始加上 Application.EnableEvents = False
結尾加上Application.EnableEvents = true
請指教
作者:
lpk187
時間:
2017-5-30 00:11
本帖最後由 lpk187 於 2017-5-30 00:16 編輯
回復
1#
enoch
當你同時使用Worksheet_Change和 Worksheet_SelectionChange時,
只要你變更某儲存格後,按下Enter鍵或Tab鍵,這時Worksheet_SelectionChange會比Worksheet_Change先觸發事件,
而你在Worksheet_Change 事件中加上 Application.EnableEvents = False 是無效的,它先啟動了Worksheet_SelectionChange事件
除非關閉掉 "按Enter鍵後,移動選取範圍":參照下圖,
不要勾選
這個項目
[attach]27243[/attach]
或者加上這2個事件
Private Sub Worksheet_Activate()
Application.MoveAfterReturn = False
End Sub
Private Sub Worksheet_Deactivate()
Application.MoveAfterReturn = True
End Sub
複製代碼
也就是說當你改變了儲存格內容後按下Enter鍵不要移動選取的儲存格而是用Worksheet_Change去移動它
作者:
lpk187
時間:
2017-5-30 00:15
本帖最後由 lpk187 於 2017-5-30 00:18 編輯
回復
1#
enoch
如下:
Dim xl_Address '設一個公用變數,讀取位址用
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False '這裡只是暫時開閉,暫時不會觸發下一行的移動(只是暫時的,它還是觸發,只你你一打開,它還是會觸發的)
Target.Offset(1).Select '執行這行時並不會啟動Worksheet_SelectionChange
xl_Address = Target.Address ' 自設條件斷點,以利 Worksheet_SelectionChange 判斷用
Application.EnableEvents = True '當這裡打開時,一樣會啟動 SelectionChange 不過呢,它移動的位置?是目前的儲存格位置,比如說在A1改變內容而移動的位置還是A1
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '所以在這裡的一開始就要加入判斷了
If xl_Address = Target.Address Then '當目標儲存格的位址和Worksheet_Change一樣時,跳出此事件
xl_Address = Null '設xl_Address為null,這樣當你儲存格位置改變時也不會因此而不再觸動 SelectionChange事件
Exit Sub '離開此事件
End If
Cells(1, 1).Select '所以當儲存格內容改變時這裡是不會執行的(這裡只是假設的程式碼,也是你自己的程式碼部份,不要抄進去你的程式碼中)
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)