Worksheet_Change Never FIres

时间:2012-07-25 17:31:06

标签: excel events vba excel-vba

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

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

永远不会发火。我已在立即窗口中测试过:

  

?Application.EnableEvents

最终返回True,所以它应该触发。有谁知道为什么这根本不想射击?

3 个答案:

答案 0 :(得分:9)

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

Sheet2 (Sheet1)

然后Sheet1是Name,Sheet2是CodeName。

查看是否已将代码放入错误模块的最简单方法是右键单击工作表的选项卡,然后选择“查看代码”。这将为该工作表打开CodePane,这就是您的代码所在的位置。

答案 1 :(得分:4)

这个问题很久以前就已发布,但最近我遇到了同样的问题。如果还有其他任何vba新手在努力解决这个问题,请尝试保存您的工作簿并重新打开它。在我这样做之后,我工作表中的Worksheet_Change Sub按照我的预期进行了解雇。

也许有一个控件来编译我缺少的工作表副本???

答案 2 :(得分:2)

通常与Target一起使用。这是一个例子,如果你突出显示M4并更改值,看看会发生什么:

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

HERE关于此活动的帖子相当不错

根据该帖子调整代码,您可以执行此类操作

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 

好的 - 请参阅下面的评论+我刚刚测试过,您的代码应该可以正常运行。试试这个?这也行不通吗?

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