You need to enable JavaScript to run this app. VBA 工作表Change事件MsgBox点击否后无限循环问题排查
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 12:45:08