VBA中On Error GoTo突然失效,错误无法被正常处理
VBA错误处理失效问题修复方案
问题根源
当代码跳转到DownloadFailed错误标签后,VBA的错误处理会进入**"已激活"状态**,仅用Err.Clear只能清除错误信息,无法重置错误处理的激活状态。后续循环中的On Error语句会因为这个残留状态无法正常接管错误捕获,导致错误直接暴露并崩溃。
修复步骤
核心是用Resume系列语句重置错误处理状态,让后续的错误捕获逻辑恢复正常:
- 在
DownloadFailed块处理完错误后,通过Resume Next跳转到循环的下一次迭代,同时重置错误处理状态 - 确保每个错误处理块都能正确退出,避免状态残留
修改后的代码示例
On Error GoTo logError For d = 0 To Doclist.Count -1 On Error GoTo DownloadFailed session.findById("wnd[0]/tbar[1]/btn[30]").press session.findById("wnd[1]/usr/sub:SAPLSPO4:0300/ctxtSVALD-VALUE[0,21]").Text = filepath On Error GoTo logError ' ... 其他业务代码 DownloadFailed: Err.Clear ' 关键:用Resume Next重置错误处理状态,回到下一次循环 Resume Next Next d logError: ws1.Cells(1, 7).Value = Err.Description Workbooks("Main.xlsm").Save ' 若需继续执行后续代码,可添加Resume Next;若为致命错误,用End终止 ' Resume Next ' 根据实际需求调整
补充说明
Resume Next会让代码跳转到触发错误语句的下一行(即Next d),既完成循环迭代,又重置了错误处理的激活状态,确保下一次循环的On Error语句能正常工作- 错误619多与SAP GUI脚本的会话异常有关(如会话丢失、控件找不到),修复错误处理后可正常捕获该错误并处理,而非直接崩溃
内容的提问来源于stack exchange,提问作者sebsee
相关产品推荐
相关产品推荐

