Excel工作表Change事件是最常用的事件代碼之一,,通俗的講工作表內容發(fā)生變化時,,此事件將被激活。 Change事件的過程框架如下,,其中參數Target 是Range類型變量,,代表工作表中發(fā)生變化的單元格范圍。
Private Sub Worksheet_Change(ByVal Target As Range)
' Your code
End Sub
下面來看一個最簡單示例,,將代碼寫入工作表模塊,,如下圖所示。
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "發(fā)生變化的單元格是:" & Target.Address
End Sub
在Sheet2工作表中選擇B3至E8單元格區(qū)域,,輸入“2”,,然后按<Ctrl+Enter>快捷鍵填充數據,將顯示如下圖所示的提示框,,Target.Address 將返回發(fā)生變化的單元格區(qū)域的絕對地址,。
有時需要指定Change事件的有效單元格區(qū)域,那么就需要做代碼過程中進行相應的判斷,,使用的場景基本上可以分為如下兩種,。
- 場景1:監(jiān)測單個單元格
顧名思義,只有某個指定單元格發(fā)生變化時,才進行后續(xù)的處理,。首先判斷發(fā)生變化的單元格是為單個單元格,,接著使用Target.Address = Range(TARGET_RNG).Address 作為判斷條件,判斷是否為指定的單元格,,如果需要監(jiān)測其他單元格,,只需要修改常量 TARGET_RNG。
Private Sub Worksheet_Change(ByVal Target As Range)
Const TARGET_RNG = "A1"
Application.EnableEvents = False
With Target
If .Count = 1 Then
If .Address = Range(TARGET_RNG).Address Then
' Your Code
End If
End If
End With
Application.EnableEvents = True
End Sub
- 場景2:監(jiān)測指定區(qū)域
如果需要監(jiān)測某個單元格區(qū)域,,例如:A5:B10的單元格區(qū)域內的某個單元格發(fā)生變化時,,運行相關代碼,可以使用下面的代碼,。這個應用場景可以兼容“場景1”,。
Private Sub Worksheet_Change(ByVal Target As Range)
Const TARGET_RNG = "A5:B10"
Application.EnableEvents = False
With Target
If .Count = 1 Then
Set c = Application.Intersect(Range(TARGET_RNG), Target)
If Not c Is Nothing Then
' Your Code
End If
End If
End With
Application.EnableEvents = True
End Sub
|