当像“SAPsession.FindById("wnd[0]").resizeWorkingPane(170, 25, False)”这样的命令发送到 SAP 并发生错误时,我想记录错误并让脚本在用户之后继续输入(如果需要)来修复错误。接下来我想使用日志来检查错误并修复它们。
我想通过一个额外的子程序来处理 sap 命令并捕获如下错误:
Private sub DoSomethingInSAP()
SAPCommand(SAPsession.FindById("wnd[0]").resizeWorkingPane(170, 25, False))
SAPCommand(SAPsession.FindById("wnd[0]/tbar[0]/okcd").text = "/nsu3")
SAPCommand(SAPsession.FindById("wnd[0]").sendVKey(0))
End Sub
Private sub SAPCommand(input as ?????) '//SAPCommand to be executed
try
Run SAPCommand
Catch ex as Exception
Log("Error: " & input & vbCRLF & ex.tostring)
msgbox("First fix the error for command: " & vbCRLF & input & vbCRLF & "Next: Click 'Ok' to continue")
end try
end sub
我知道上面的代码根本不起作用,但它只是为了说明我想要完成的任务。
谢谢!
我建议如下:
Private Sub DoSomethingInSAP()
On Error GoTo error
SAPsession.FindById("wnd[0]").resizeWorkingPane(170, 25, False)
SAPsession.FindById("wnd[0]/tbar[0]/okcd").Text = "/nsu3"
SAPsession.FindById("wnd[0]").sendVKey (0)
Exit Sub
error:
Log("Error: " & input & vbCRLF & ex.tostring)
MsgBox("First fix the error for command: " & vbCRLF & input & vbCRLF & "Next: Click 'Ok' to continue")
Resume Next
End Sub
如果第一个 FindById 发生错误,控制将跳转到错误块,您可以在其中进行日志记录和用户输入。
Resume Next
是您场景的关键部分。 它将把控制权返回给引发错误的语句后面的语句,在本例中为第二个 FindById。
这种方法的一个缺点是您不知道哪一行引发了日志记录和用户输入的错误。