分享

 Excel-工作表change事件

 郗peng 2021-06-02

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多