Worksheet_Change从不FIres

我正在使用VBA来更改Excel并在Sheet1中具有以下简单的事件处理程序:

Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "HI" End Sub 

永远不会失火 我已经在即时窗口中进行了testing:

?Application.EnableEvents

最终返回True,所以它应该会触发。 有谁知道为什么这不想要开火?

你有多张表吗? 请注意,工作表的CodeName属性和Name属性(Excel中的选项卡上的名称)并不总是相同的。 例如,如果项目资源pipe理器列出

 Sheet2 (Sheet1) 

然后Sheet1是Name,Sheet2是CodeName。

查看是否将代码放入错误模块的最简单方法是右键单击工作表的选项卡,然后select“查看代码”。 这将带来CodePane为该表,这就是你的代码应该在哪里。

通常与Target 。 下面是一个例子,如果你突出M4和更改值看看会发生什么:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$M$4" Then MsgBox ("HI") End If End Sub 

这里是相当不错的post关于这个事件

从这个post调整代码,然后你可以做这样的事情

 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Me.Range("$A$1:$V$100")) Is Nothing Then Exit Sub If Target.Address = "$A$1" Then MsgBox ("A1") ElseIf Target.Address = "$A$2" Then MsgBox ("A2") End If End Sub 

好的 – 看下面的评论+我刚刚testing过,你的代码应该可以正常工作。 尝试这个? 这是否也行不通?

 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Me.Cells) Then MsgBox ("A1") End If End Sub 

这个问题发布很久以前,但我最近有这个相同的问题。 如果还有其他的vba新手在这里挣扎,试着保存你的工作簿并重新打开它。 我做到这一点后,我的表中的Worksheet_Change小组正如我所料。

也许有一个控件来编译我失踪的工作表子?