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

SAP VBA脚本SM37未找到作业时错误619无法跳过循环问题

SAP Scripting VBA循环中二次错误无法跳转的问题分析与修复

问题核心原因

你的代码存在三个关键问题,导致第二次遇到619错误时无法继续跳转循环:

  1. 错误处理被提前关闭:第一次触发错误后,On Error GoTo 0直接关闭了全局错误捕获,第二次循环时没有重新启用错误处理,再遇到错误就会直接中断程序。
  2. 错误后未清理SAP界面:SM37找不到作业时SAP会弹出错误弹窗,错误触发后你没有关闭这个弹窗,后续循环的SM37操作会因为界面状态异常而失败。
  3. 错误后代码继续执行:错误触发后直接跳到Handler,但后续未完成的SAP操作代码仍会被执行,导致界面状态混乱。

修复后的代码

For i = 2 To objSheet.UsedRange.Rows.Count
    If Trim(CStr(objSheet.Cells(i, 1).Value)) = "" Then
        Exit For
    End If
    
    ' 每次循环重新启用错误捕获
    On Error GoTo Handler:
    
    ' 重置SAP到SM37初始界面,避免之前的错误残留
    session.findById("wnd[0]/tbar[0]/okcd").Text = "/nsm37"
    session.findById("wnd[0]").sendVKey 0
    
    session.findById("wnd[0]/usr/chkBTCH2170-PRELIM").Selected = False
    session.findById("wnd[0]/usr/chkBTCH2170-READY").Selected = False
    session.findById("wnd[0]/usr/chkBTCH2170-RUNNING").Selected = False
    session.findById("wnd[0]/usr/chkBTCH2170-FINISHED").Selected = False
    session.findById("wnd[0]/usr/chkBTCH2170-ABORTED").Selected = False
    session.findById("wnd[0]/usr/txtBTCH2170-JOBNAME").Text = Trim(CStr(objSheet.Cells(i, 1).Value))
    session.findById("wnd[0]/usr/txtBTCH2170-USERNAME").Text = "*"
    session.findById("wnd[0]/usr/ctxtBTCH2170-FROM_DATE").Text = ""
    session.findById("wnd[0]/usr/ctxtBTCH2170-TO_DATE").Text = ""
    session.findById("wnd[0]").sendVKey 0
    
    objSheet.Cells(i, 3).Value = "Not Found"
    session.findById("wnd[0]/tbar[1]/btn[8]").press
    
    session.findById("wnd[0]/usr/lbl[4,12]").SetFocus
    session.findById("wnd[0]/usr/lbl[4,12]").caretPosition = 0
    session.findById("wnd[0]").sendVKey 30
    session.findById("wnd[1]/usr/txtBTCH1180-JOBNAME").Text = Trim(CStr(objSheet.Cells(i, 2).Value))
    session.findById("wnd[1]/usr/txtBTCH1180-JOBNAME").caretPosition = 31
    session.findById("wnd[1]/tbar[0]/btn[0]").press
    session.findById("wnd[0]/tbar[0]/btn[3]").press
    
    session.findById("wnd[0]/usr/chkBTCH2170-PRELIM").Selected = True
    session.findById("wnd[0]/usr/txtBTCH2170-JOBNAME").Text = Trim(CStr(objSheet.Cells(i, 2).Value))
    session.findById("wnd[0]/usr/chkBTCH2170-PRELIM").SetFocus
    session.findById("wnd[0]/tbar[1]/btn[8]").press
    
    objSheet.Cells(i, 3).Value = "AdHoc Released"
    
    ' 无错误时跳过Handler块
    GoTo LoopEnd
    
Handler:
    ' 关闭SAP错误弹窗(如果存在)
    If session.ActiveWindow.Name = "wnd[1]" Then
        session.findById("wnd[1]/tbar[0]/btn[0]").press
    End If
    ' 标记当前行错误状态
    objSheet.Cells(i, 3).Value = "Error: Job Not Found"
    ' 跳转到循环末尾,进入下一次迭代
    Resume LoopEnd
    
LoopEnd:
    ' 关闭本次循环的错误捕获
    On Error GoTo 0
Next

关键修改点说明

  • 每次循环开头重新启用On Error GoTo Handler,确保每次迭代都能捕获错误。
  • 添加GoTo LoopEnd,无错误时跳过Handler块,避免执行错误处理逻辑。
  • Handler块中添加关闭SAP错误弹窗的逻辑,清理界面状态,保证下一次循环的SM37操作能正常执行。
  • 使用Resume LoopEnd直接跳转到循环末尾,确保错误后直接进入下一次迭代,不执行后续未完成的SAP操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:57:51