VBScript For Each循环错误处理:SAP事务异常跳过方案
SAP脚本错误处理与循环修正方案
问题分析
原代码存在两个核心问题:
- 语法错误:
Next语句被嵌套在If块内,VBScript不允许这种写法,导致脚本无法识别Next关键字。 - 错误处理逻辑混乱:错误检查时机不对,无法有效捕获订单不存在的错误并跳过当前项处理。
修改后的代码
If Not IsObject(application) Then Set SapGuiAuto = GetObject("SAPGUI") Set application = SapGuiAuto.GetScriptingEngine End If If Not IsObject(connection) Then Set connection = application.Children(0) End If If Not IsObject(session) Then Set session = connection.Children(0) End If If IsObject(WScript) Then WScript.ConnectObject session, "on" WScript.ConnectObject application, "on" End If 'Variables Dim order(2) order(0)="xxx" order(1)="yyy" order(2)="zzz" For Each x In order ' 重置错误状态,开启错误捕获 On Error Resume Next Err.Clear ' 清除之前的错误记录 ' 执行SAP查询操作,订单不存在时会在此触发错误 session.findById("wnd[0]").maximize session.findById("wnd[0]/usr/ctxtRC29L-MATNR").text = x session.findById("wnd[0]/usr/ctxtRC29L-MATNR").caretPosition = 8 session.findById("wnd[0]/tbar[1]/btn[8]").press ' 检查是否有错误发生 If Err.Number <> 0 Then ' 可选:打印错误信息用于调试 WScript.Echo "处理订单 " & x & " 时出错:" & Err.Description ' 跳过当前循环剩余操作,进入下一个订单处理 On Error GoTo 0 Continue For End If ' 无错误时继续执行导出流程 session.findById("wnd[0]/tbar[1]/btn[45]").press session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").select session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").setFocus session.findById("wnd[1]/tbar[0]/btn[0]").press ' 设置导出路径 session.findById("wnd[1]/usr/ctxtDY_PATH").text = "C:\Users\blabla" ' 设置导出文件名,用&替代+避免字符串拼接错误 session.findById("wnd[1]/usr/ctxtDY_FILENAME").text = x & ".xls" session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 12 session.findById("wnd[1]/tbar[0]/btn[0]").press session.findById("wnd[0]/tbar[0]/btn[3]").press ' 恢复默认错误处理 On Error GoTo 0 Next
关键改动说明
- 修正
Next语法错误:将Next还原到For Each的对应位置,确保循环结构合法。 - 优化错误捕获逻辑:在执行SAP查询前清除错误记录,查询后立即检查错误,用
Continue For直接跳过当前出错订单的后续操作。 - 字符串拼接优化:把
x + ".xls"改为x & ".xls",避免x包含特殊内容时触发拼接错误。 - 调试辅助:添加错误信息打印语句,方便定位具体出错的订单(可根据需求删除)。
内容的提问来源于stack exchange,提问作者Aleksi
相关产品推荐
相关产品推荐

