【问题标题】:VBA that executs code on cell change can not handle name change执行单元格更改代码的 VBA 无法处理名称更改
【发布时间】:2026-01-18 01:55:01
【问题描述】:

我遇到了与this 帖子中相同的问题。给出的答案,按照要求做了,它在给定单元格更改时执行代码。

它也对我有用,除非我尝试将 Sub 的名称更改为其他名称,否则代码将停止执​​行。没有给出警告。有谁知道这是为什么?

这是解决上一个问题的代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Me.Range("D2")) Is Nothing Then Exit Sub
    Application.EnableEvents = False 'to prevent endless loop

    MsgBox "You changed THE CELL!"

    Application.EnableEvents = True
End Sub

或更短的版本

Private Sub Worksheet_Change(ByVal Target As Range)
    IF Target.Address = "$D$2" Then
        MsgBox("Cell D2 Has Changed.")
    End If
End Sub

当我更改他们的名字时,两个 Subs 的反应都是一样的。是否有触发器调用宏,我还必须更改名称?

【问题讨论】:

  • 代码存根Private Sub Worksheet_Change(ByVal Target As Range)Worksheet 对象更改时触发的事件代码。如果更改名称,则更改工作表时代码不会自动触发。

标签: vba excel


【解决方案1】:
Private Sub Worksheet_Change(ByVal Target As Range)

是一个事件。它被系统调用并且必须这样命名

这里有一些阅读供您了解更多信息

http://www.cpearson.com/excel/Events.aspx

【讨论】:

    【解决方案2】:

    您不能更改工作表事件的方法名称。

    这个名称是 VBA 知道当工作表中的某些内容发生更改时应该触发此方法的方式。

    【讨论】: