Excel工作表事件(2)- Change事件

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章