You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel Worksheet_Change事件中移除的VBA代码作用及影响问询

问题说明

我在表格里用一列跟踪800+个轴承的状态(分布在8个工作表,数量还会持续增加),对应列记录状态最后变更的日期。工作簿的仪表盘有多个ActiveX控件和用户表单可自动修改状态,但我希望手动修改下拉列表状态时,对应单元格日期能自动更新。

我先修改了一段VBA代码并生效,之后又调整代码,实现了根据状态值更新该行不同单元格日期的功能,但移除了一段代码,不清楚这段代码的作用,担心后续会出问题。


移除的代码片段

Application.EnableEvents = False
Set xRg = Application.Intersect(Target.Dependents, Me.Range("G5:G80"))
If (Not xRg Is Nothing) Then
    For Each xCell In xRg
        xCell.Offset(0, 1) = Date
    Next
End If
Application.EnableEvents = True

此前使用的原代码

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim xRg As Range, xCell As Range
    On Error Resume Next
    If (Target.Count = 1) Then
        If (Not Application.Intersect(Target, Me.Range("G5:G80")) Is Nothing) Then _
            Target.Offset(0, 1) = Date
        Application.EnableEvents = False
        Set xRg = Application.Intersect(Target.Dependents, Me.Range("G5:G80"))
        If (Not xRg Is Nothing) Then
            For Each xCell In xRg
                xCell.Offset(0, 1) = Date
            Next
        End If
        Application.EnableEvents = True
    End If
End Sub

修改后的代码

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    Dim xRg As Range, xCell As Range
    Dim UpperIndex As Integer
    Dim LowerIndex As Integer
    Dim Rows As Integer
    
       
    Set tbl = ThisWorkbook.Worksheets("Route 1").ListObjects("Route_1_Table")
    Rows = tbl.Range.Rows.Count
    UpperIndex = 5
    LowerIndex = Rows - 3
    
    
    On Error Resume Next
    If (Target.Count = 1) Then
        If (Not Application.Intersect(Target, Me.Range("G" & UpperIndex & ":G" & LowerIndex)) Is Nothing) Then _
            Target.Offset(0, 1) = Date
            If Target.Value = "Good" Then _
            Target.Offset(0, 5) = Date
            If Target.Value = "Pending Baseline" Then _
            Target.Offset(0, 4) = Date
    End If
End Sub

移除代码的作用及影响分析

  1. 核心作用:这段代码是处理间接修改G列状态单元格的场景——当你修改了某个单元格,而这个单元格是G5:G80范围内单元格的引用依赖项(比如G列单元格用公式引用了其他单元格的值),此时会自动将这些G列单元格对应的日期列(H列)更新为当前日期。
  2. 适用场景:如果你的G列状态单元格是通过公式计算得到的(而非手动直接输入或控件修改),比如G6单元格公式是=I6,那么当你修改I6的值时,这段代码会触发G6对应的H6更新日期。
  3. 移除后的影响:
    • 如果你的G列所有状态都是手动直接输入或通过ActiveX控件/用户表单直接赋值,没有用公式引用其他单元格,那这段代码移除后不会有任何问题。
    • 但如果存在G列单元格依赖其他单元格计算的情况,那么修改依赖单元格时,对应的日期列将不会自动更新,需要手动维护日期,或者重新添加这段逻辑。

内容的提问来源于stack exchange,提问作者Drew Killingley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:20:40