VBA SAP createsession

时间:2017-06-25 10:24:27

标签: excel vba excel-vba session sap

也许有人可以帮助我使用VBA Excel创建新的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的某个地方。因此,当我尝试连接到第一个连接的第一个会话时,我得到一个错误,在第一个连接中没有会话
我想要做的是创建新会话。 我可以通过

来做到这一点
 Dim sapSession As SAPFEWSELib.GuiSession
 Dim sapCon As SAPFEWSELib.GuiConnection
 Set sapCon = sap.Connections.Item(0)
 Set sapSession = Connection.sessions.Item(0)

 sapsession.createsession

这个工作正常,但它没有帮助我仍然需要先设置会话

设置连接后有没有办法创建会话?
sapCon.createsession之类的东西

有谁知道如何使用变量使用特定会话?

Set sapSession = Connection.sessions.Item(0)

这可行,但是当我尝试

Dim SessionNumber as integer 
....
SessionNumber = 0 
Set sapSession = Connection.sessions.Item(SessionNumber)

它会抛出错误"收集访问的错误索引类型"

2 个答案:

答案 0 :(得分:1)

Excel要求会话号是一个整数,因此您可以使用Cint()的类型转换。奇怪的是,即使SessionNumber被定义为整数,也建议/需要这个。

Dim SessionNumber  
....
SessionNumber = 0 
Set sapSession = Connection.sessions.Item(Cint(SessionNumber))

答案 1 :(得分:0)

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