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” 结束小组