Worksheet_SelectionChange 及 Worksheet_Change
- 帖子
- 176
- 主題
- 98
- 精華
- 0
- 積分
- 279
- 點名
- 0
- 作業系統
- window 7
- 軟體版本
- office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2011-2-17
- 最後登錄
- 2020-4-8
|
Worksheet_SelectionChange 及 Worksheet_Change
Worksheet_SelectionChange 及 Worksheet_Change
請問程式中同時使用 Worksheet_SelectionChange 及 Worksheet_Change 時
如何在更改儲存格內容時, 只觸發Worksheet_Change 事件
嘗試過在程式開始加上 Application.EnableEvents = False
結尾加上Application.EnableEvents = true
請指教 |
|
|
|
|
|
|
|
- 帖子
- 552
- 主題
- 6
- 精華
- 0
- 積分
- 576
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office 2010
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2015-2-8
- 最後登錄
- 2026-9-10
  
|
2#
發表於 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鍵後,移動選取範圍":參照下圖,不要勾選這個項目
或者加上這2個事件- Private Sub Worksheet_Activate()
- Application.MoveAfterReturn = False
- End Sub
- Private Sub Worksheet_Deactivate()
- Application.MoveAfterReturn = True
- End Sub
複製代碼 也就是說當你改變了儲存格內容後按下Enter鍵不要移動選取的儲存格而是用Worksheet_Change去移動它 |
|
|
|
|
|
|
|
- 帖子
- 552
- 主題
- 6
- 精華
- 0
- 積分
- 576
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office 2010
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2015-2-8
- 最後登錄
- 2026-9-10
  
|
3#
發表於 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
複製代碼 |
|
|
|
|
|
|
|