Worksheet_SelectionChange事件异常:InputBox反复弹出问题求助
解决VBA输入框反复弹出的问题
嘿,我懂你的困扰——选完"Yes"填完日期后,不管点哪里都弹输入框,确实闹心!这问题根源出在你用的Worksheet_SelectionChange事件上:这个事件只要工作表里的选区有变化就会触发,哪怕你只是点了别的单元格,它都会检查B22的值,而B22已经是"Yes"了,所以每次都弹输入框。
给你两个靠谱的解决方案,选一个适合你的:
方案1:优化SelectionChange事件的触发条件
给原事件加个判断,只有当你**选中B22单元格,且它的值是"Yes"**的时候才弹出输入框,其他操作一概不触发:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim myValue As Variant ' 仅当选中B22且值为"Yes"时执行 If Not Intersect(Target, Range("B22")) Is Nothing And Range("B22").Value = "Yes" Then myValue = InputBox("Insert Initial Detach Date") ' 处理用户点击取消的情况,避免写入空值 If myValue <> False Then Range("C22").Value = myValue End If End If End Sub
方案2:改用Worksheet_Change事件(更推荐)
其实你要监听的是B22的内容变化(从下拉列表选"Yes"),用Worksheet_Change事件更贴合需求,而且不会因为选区切换乱触发:
Private Sub Worksheet_Change(ByVal Target As Range) Dim myValue As Variant ' 只监听B22单元格的内容变化 If Not Intersect(Target, Range("B22")) Is Nothing Then ' 当B22被改为"Yes"时弹出输入框 If Target.Value = "Yes" Then myValue = InputBox("Insert Initial Detach Date") If myValue <> False Then ' 临时禁用事件,避免设置C22时再次触发Change事件 Application.EnableEvents = False Range("C22").Value = myValue ' 重新启用事件 Application.EnableEvents = True End If End If End If End Sub
为什么方案2更好?
因为它直接监听B22的内容修改动作,只有当你把B22改成"Yes"的时候才会弹输入框,后续不管你点哪个单元格、编辑哪个内容,都不会再触发这个逻辑,完美解决反复弹出的问题。
内容的提问来源于stack exchange,提问作者RobertC
相关产品推荐
相关产品推荐

