我已经可以使用VBA和SAP记录和播放.vbs脚本自动检索SAP事务数据,现在我面临着一个问题,我在Visual Basic Studio .NET的同一个程序中没有看到,如果SAP Easy Access for my connection : LA-6-Prod已经打开,那么多重登录窗口就会出现,并打破我的代码,从而导致整个事情失败。
如何让我的代码使用已经存在并打开的连接,或者在连接未打开的情况下将其打开?
如果LA-6-Prod没有打开,但不能告诉最终用户在执行宏之前没有打开任何连接窗口,那么它就可以完美地工作。
非常感谢
这是我的代码:
Sub my_sap
Dim SapGui, Applic, connection, session, WSHShell
strconnection = Worksheets("sap_info").Range("A2").Value
Shell "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe", vbNormalFocus
Set WSHShell = CreateObject("WScript.Shell")
Do Until WSHShell.AppActivate("SAP Logon ")
application.Wait Now + TimeValue("0:00:01")
Loop
Set WSHShell = Nothing
Set SapGui = GetObject("SAPGUI")
Set Applic = SapGui.GetScriptingEngine
Set connection = Applic.OpenConnection('LA-6-Prod', True)
Set session = connection.Children(0)
'===============SAP SCRIPTING===========
'Execute SAP stuffs, I put in here what I recorded from sap record and it works OK
'=======================================
Set session = Nothing
connection.CloseSession ("ses[0]")
Set connection = Nothing
Set sap = Nothing
End Sub
发布于 2019-04-19 05:09:50
您可以使用一个函数来测试连接是否已经打开,方法如下:
Sub sap()
If SAP_Connection Then
MsgBox ("Sap is Open so just attached to session(0)")
Else
MsgBox ("Sap is NOT open so open Logon Window")
End If
End Sub
该函数将如下所示。
Function SAP_Connection() As Boolean
On Error GoTo ErrSap
If Not IsObject(SapApplication) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set SapApplication = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = SapApplication.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 SapApplication, "on"
End If
SAP_Connection = True
Exit Function
ErrSap:
SAP_Connection = False
End Function
https://stackoverflow.com/questions/55733193
复制相似问题