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))