You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA工作表Change事件代码功能正常,修改C3/E3时Excel崩溃求助

问题原因与解决方案

崩溃的核心原因是无限事件循环:修改C3触发Worksheet_Change事件后,代码修改E3会再次触发该事件;同理修改E3时修改C3也会触发事件,反复循环导致Excel资源耗尽崩溃。

修复后的代码

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim SpotRate As Double
    Dim srcSheet As Worksheet
    
    ' 禁用事件,防止修改单元格时重复触发Change事件
    Application.EnableEvents = False
    
    On Error GoTo Cleanup ' 错误处理,确保事件能恢复
    
    Set srcSheet = ThisWorkbook.Worksheets("Input Data")
    SpotRate = srcSheet.Range("H2").Value
    
    If Target.Address = "$C$3" Then
        If Target.Value <> "" Then
            Range("E3").Value = Target.Value * SpotRate
        Else
            Range("E3").ClearContents
        End If
    ElseIf Target.Address = "$E$3" Then
        If Target.Value <> "" Then
            ' 增加判断避免除以0错误
            If SpotRate <> 0 Then
                Range("C3").Value = Target.Value / SpotRate
            Else
                MsgBox "H2单元格的值不能为0"
            End If
        Else
            Range("C3").ClearContents
        End If
    End If

Cleanup:
    ' 恢复事件触发,必须执行
    Application.EnableEvents = True
    If Err.Number <> 0 Then
        MsgBox "发生错误:" & Err.Description
    End If
End Sub

关键修改说明

  • 禁用/恢复事件:通过Application.EnableEvents = False在修改单元格前关闭事件触发,避免循环;操作完成后必须恢复为True,否则后续的单元格修改都不会触发Change事件。
  • 错误处理:添加On Error GoTo Cleanup确保即使代码出错,也能执行到恢复事件的步骤,防止事件被永久禁用。
  • 除以0防护:增加SpotRate <> 0的判断,避免H2为0时执行除法导致运行时错误。

内容的提问来源于stack exchange,提问作者user22168531

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:02:52