VBA SAP创build
也许有人可以帮助我使用VBA Excel创build新的SAP会话
一些代码来理解这个问题
If Not IsObject(sap) Then Set SapGuiAuto = GetObject("SAPGUI") Set sap = SapGuiAuto.GetScriptingEngine End If If Not IsObject(Connection) Then Set Connection = sap.Connections.Item(0) End If If Not IsObject(session) Then Set session = Connection.Children(0) End If
大多数情况下这个工作正常。 但有时这部分不起作用
Set session = Connection.Children(0)
它发生在SAP超时发生时(在一些空闲时间后自动注销)。 在那种情况下,我有
sap.Connections.Count
= 2
但
Connection.Sessions.Count
= 0
看起来,超时的连接仍然挂在SAP的某个地方。 所以当我尝试连接到第一个连接的第一个连接时,我得到了一个错误,在第一个连接没有会话。
我想要做的是创build新的会话。 我可以做到这一点
Dim sapSession As SAPFEWSELib.GuiSession Dim sapCon As SAPFEWSELib.GuiConnection Set sapCon = sap.Connections.Item(0) Set sapSession = Connection.sessions.Item(0) sapsession.createsession
这个工作正常,但它没有帮助,我仍然需要先设置会话
有没有办法创build会话后设置连接?
像sapCon.createsession
一样
有没有人知道如何使用特定的会话使用variables?
Set sapSession = Connection.sessions.Item(0)
这工作正常,但是当我尝试
Dim SessionNumber as integer .... SessionNumber = 0 Set sapSession = Connection.sessions.Item(SessionNumber)
它会引发错误“收集访问的索引types不正确”
Excel要求会话号码是一个整数,所以你可以使用Cint()的types转换。 奇怪的是,即使SessionNumber被定义为一个整数,这也是被build议/需要的。
Dim SessionNumber .... SessionNumber = 0 Set sapSession = Connection.sessions.Item(Cint(SessionNumber))
CreateSession命令可以快速执行并返回到Excel,但SAP需要一段时间才能完成打开新的会话。 因此,你需要让你的Excel代码等待。
这是一个例子:
Const ms as Double = 1.15740741E-08 ' one millisecond, in days = 1/(1000*24*60*60) Dim sapCon As SAPFEWSELib.GuiConnection Dim sapSession As SAPFEWSELib.GuiSession Dim nSessions As Integer Set sapCon = sap.Connections(0) Set sapSession = sapCon.Sessions(0) nSessions = sapCon.Sessions.Count sapSession.createsession Do Application.Wait (Now() + 500*ms) If sapCon.Sessions.Count > nSessions Then Exit Do Loop Set sapSession = sapCon.Sessions.Item(CInt(sapCon.Sessions.Count - 1))