暂停后,VBA SAP GUI重新创建会议



也许有人可以帮助我使用VBA Excel创建新的SAP GUI会话。

一些理解问题的代码:

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 GUI超时发生时(在闲置时间后自动记录(时发生。在这种情况下,我有:

sap.Connections.Count = 2

但是

Connection.Sessions.Count = 0

看起来超时的连接仍然挂在SAP GUI中。因此,当我尝试连接到第一个连接的第一个会话时,我会发现错误,因为第一个连接中没有会话。

我想做的是创建新会话?

我可以通过

做到这一点
 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)

它引发错误:

收集访问的不良索引类型

excel要求会话号是整数,因此您可以使用cint((的类型转换。奇怪的是,即使将sessionnumber定义为整数,也会建议/需要。

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

createSessessession命令快速执行并返回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))

最新更新