VBA触发单元格更改

我在这个指令中创build了一个下拉列表。 现在这个单元格需要在我的macros中触发。

我已经阅读了这个主题的其他一些条目,但在我的VBA excelmacros这个代码不起作用:

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then Call Macro1 End If End Sub Sub Macro1() MsgBox "The value entered in Range B2 is " & Range("B2").Value End Sub 

如果我更改单元格B2的值,则不会执行此代码,也不会显示消息框。

我复制你的代码,并把它放到我正在编辑的工作表,它工作正常。 如果你试图把这个代码放到别的地方,比如放到ThisWorkbook中,那么它就不能工作,因为事件处理器Worksheet_Change不会触发。

除了上面的答案,如果这是一个合并的单元格,并且b2不是合并中的第一个单元格,这也是行不通的。 但是,如果不是这样,你的代码是在正确的地方,它工作正常

如果您打算更改任何范围值,请确保并切换EnableEvents。 如果您不这样做,则可能会以recursion方式解决Worksheet_Change和崩溃项目的风险。

这是一个常见的devise模式

  • closuresEnableEvents
  • 检查目标(已更改的单元格)是否在您正在validation的范围内
  • 将Target作为parameter passing给另一个子例程
  • 打开EnableEvents
私人小组Worksheet_Change(BYVAL目标作为范围)
     Application.EnableEvents = False

    如果不相交(目标,范围(“B:B”))是没有的话
        macros1目标
    万一

     Application.EnableEvents = True
结束小组

 Sub Macro1(目标范围)
   MsgBox“在Range中input的值”&Target.Address(True,True)&“is”&Target.value,vbInformation,“You Entered”
结束小组