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