也许有人可以帮助我使用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)
它抛出一个错误:
集合访问的索引类型不正确
2条答案
按热度按时间8qgya5xd1#
Excel要求会话号为整数,因此可以使用Cint()的类型转换。奇怪的是,即使SessionNumber被定义为整数,也建议/要求这样做。
0yycz8jy2#
CreateSession命令快速执行并返回到Excel,但SAP需要一段时间才能完成打开新会话。因此,您需要让Excel代码等待。
下面是一个例子: