Excel下拉列表触发Worksheet_Change宏异常问题求助
解决Worksheet_Change事件误触发问题
你这问题核心是把单元格选中操作当成了值变更触发事件,但实际上Worksheet_Change本来就只会在单元格值真的变了的时候才触发。你遇到的情况多半是代码逻辑有问题,或者不小心混着用了Worksheet_SelectionChange事件。
给你修正后的代码,保证只有A1的值真正改动时才跑宏:
Private Sub Worksheet_Change(ByVal Target As Range) ' 只盯A1单元格,而且确保是单个单元格的变更 If Target.Address = "$A$1" And Target.Cells.Count = 1 Then Application.EnableEvents = False ' 执行你的宏 MyMacro Application.EnableEvents = True End If End Sub
关键改动说明:
- 用
Target.Address = "$A$1"代替Intersect,精准锁定单个单元格,避免批量操作时误触发 - 加了
Target.Cells.Count = 1判断,防止粘贴多个单元格这类操作导致的误触发 - 删掉了
Range("A1").Select,这步完全多余,反而会干扰你编辑单元格的流程
额外要注意的点:
- 检查一下有没有同时用
Worksheet_SelectionChange事件,这个事件才是选中单元格就触发的,要是同时写了这个,点击A1肯定会跑代码 - 看看
MyMacro里有没有修改A1值的操作,要是有的话确实得关EnableEvents防循环,修正后的代码已经处理了这个情况 - 测试的时候直接选A1下拉列表里的选项就行,这时候值变了才会触发宏,不会再一点击就跑了
内容的提问来源于stack exchange,提问作者Roger Masterson
相关产品推荐
相关产品推荐

