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

为何VBA错误中断仅触发一次?控制码处理异常排查

问题根源:错误处理状态未重置

VBA有个关键规则:当错误被捕获并进入处理块后,必须用Resume系列语句重置错误处理状态,否则后续再遇到错误时,On Error GoTo的跳转逻辑会失效。

你的代码第一次遇到i=37(对应字符%)触发错误时,能正常跳转到OnKeyFailed处理,但处理完后直接走到Nexti进入下一轮循环——此时错误处理的“激活状态”没有被复位,处于“已处理过错误”的锁定状态。当第二次遇到i=40(对应字符()触发错误时,VBA不会再执行On Error GoTo OnKeyFailed的跳转,直接抛出未处理的运行时错误。

修复方案

在错误处理块的末尾添加Resume Nexti,强制重置错误处理状态,让后续循环中的错误能被正常捕获:

OnKeyFailed:
    KeyPressed = "{" & KeyPressed & "}"
    Range("G" & i) = i
    Range("H" & i) = Chr(i)
    Range("I" & i) = "Not Accepted: "
    Application.OnKey KeyPressed, "IgnorThisPress"
    Resume Nexti ' 关键:重置错误处理状态,回到循环标签继续执行

补充说明:你对特殊字符用大括号包裹的处理逻辑是正确的,Application.OnKey要求控制码、特殊字符必须用这种格式注册,只是遗漏了错误状态重置这一关键步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:34:57