VBA 工作表Change事件MsgBox点击否后无限循环问题排查
问题原因
你遇到的无限弹窗问题是事件嵌套触发导致的:Worksheet_Change 是工作表单元格内容变更时自动触发的事件,你代码中的两类操作都会再次修改单元格内容,进而重新触发该事件形成死循环:
- 给H列
Date Contacted、I列Date Modified写入日期的操作 - 点击「否」后执行的
Application.Undo撤销操作,本质是回改A列单元格内容,也会触发变更事件
解决方法
在执行所有会修改单元格的操作前,先通过Application.EnableEvents = False关闭Excel的事件触发开关,操作完成后再重新开启即可避免嵌套触发。额外补充错误捕获逻辑,防止代码异常中断后事件开关一直处于关闭状态,导致后续所有工作表事件失效。
修正后的完整代码如下:
Private Sub Worksheet_Change(ByVal Target As Range) ' Auto Date Dim Cell As Range Dim Answer As Integer ' 进入逻辑前先关闭事件触发,避免嵌套调用 Application.EnableEvents = False ' 错误捕获:出现异常时自动恢复事件触发 On Error GoTo ErrHandler For Each Cell In Target If Cell.Column = Range("A:A").Column Then If Cells(Cell.Row, "H").Value <> "" And Cell.Value <> "" Then Answer = MsgBox("Are you sure you want to make these changes?", vbYesNo) If Answer = vbYes Then Cells(Cell.Row, "I").Value = Int(Now) Else Application.Undo End If Else Cells(Cell.Row, "H").Value = Int(Now) End If End If Next Cell ErrHandler: ' 无论是否报错,退出前都重新开启事件触发 Application.EnableEvents = True End Sub
内容的提问来源于stack exchange,提问作者fruitsmoothie
相关产品推荐
相关产品推荐

