【发布时间】:2021-11-11 07:30:09
【问题描述】:
我在 Microsoft Access 中有一个程序。我有 VBS 脚本文件来自动化 SAP GUI 屏幕(“事务”)。在 Access 中使用 VBA 会使用 Scriptcontrol 对象打开这些不同的 VBS 脚本文件,并在 SAP 系统中执行事务。
现在,有时在运行事务时出现错误,然后脚本停止。我已经在每个 VBS 脚本文件中编写了错误处理程序。
我的目标是,如果 SAP 在运行 .VBS 时出现错误,那么它应该关闭活动的 SAP 会话并将状态信息存储在名为“ScriptStatus”的字符串中。然后我将此字符串拉回调用 vba 并再次运行相同的 .vbs 脚本。
.VBS 中的代码
dim ScriptStatus
Function (DoWork)
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
on error resume Next
'SAP Code
session.findById("wnd[0]").maximize
'Furhter SAP Code
'Change the ScriptStatus to completed
ScriptStatus = "Script Completed"
If Err.Number <> 0 Then
'Change ScriptStatus
ScriptStatus = "Script Error"
'Close SAP Session
session.findById("wnd[0]").Close
End If
End Function
调用 VBA 中的代码
Sub Foo()
Dim vbsCode As String, result As Variant, script As Object, ScriptInfo As String
ReRunScript:
'// load vbs source
Open "x.vbs" For Input As #1
vbsCode = Input$(LOF(1), 1)
Close #1
On Error GoTo ERR_VBS
Set script = CreateObject("ScriptControl")
script.Language = "VBScript"
script.AddCode vbsCode
result = script.Run("DoWork")
ScriptInfo = script.Eval("ScriptStatus")
If ScriptInfo = "Script Completed" Then
Exit Sub
Elseif ScriptInfo = "Script Error" Then
Goto ReRunScript
End if
ERR_VBS:
MsgBox Err.Description
MsgBox script.Eval("ScriptStatus")
End Sub
【问题讨论】:
标签: vba ms-access vbscript sap-gui