VBA脚本-是否可以通过SID而不是名称登录

2020-09-22 17:29发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我有一个VBA脚本,该脚本登录到SAP,从Excel工作表中输入一些数据,提取一些结果并将其复制回Excel。 该脚本在我的机器上可以正常运行,但是在其他机器上却不能正常运行,我发现这是因为在每台机器上,系统连接参数中指定的"描述"都不相同(不知道为什么)。 为了解决这个问题,我想知道是否可以改用System ID字段,因为这里的所有计算机上都一样:

代码的相关部分在这里:

如果不是IsObject(SAPguiApp),则
出错时恢复下一个
设置SAPguiAuto = GetObject(" SAPGUI")
如果Err.Number <> 0则
出错时转到0
设置WshShell = CreateObject(" WScript.Shell")
设置oExec = WshShell.Exec(" C:\ Program Files(x86)\ SAP \ FrontEnd \ SAPgui \ saplogon.exe")

不是WshShell.AppActivate(" SAP Logon 750")
睡眠1
循环
设置SAPguiAuto = GetObject(" SAPGUI")
其他
出错时转到0
结束If
设置SAPguiApp = SAPguiAuto.GetScriptingEngine
结束,如果
如果不是IsObject(Connection),则
设置连接= SAPguiApp.OpenConnection(" 此处为字符串",为True)
如果If
If不是IsObject(session),则结束。
设置会话= Connection.Children(0)
如果,则

结束。

如果session.Children.Count> 1,则
session.findById(" wnd [1]/usr/radMULTI_LOGON_OPT2")。选择
session.findById(" wnd [1]/usr/radMULTI_LOGON_OPT2") .SetFocus
session.findById(" wnd [1]/tbar [0]/btn [0]")。按
如果结束

我还包括了允许多个会话的部分,因为我花了很长时间才弄清楚今天该怎么做,这可能对某人有所帮助。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我有一个VBA脚本,该脚本登录到SAP,从Excel工作表中输入一些数据,提取一些结果并将其复制回Excel。 该脚本在我的机器上可以正常运行,但是在其他机器上却不能正常运行,我发现这是因为在每台机器上,系统连接参数中指定的"描述"都不相同(不知道为什么)。 为了解决这个问题,我想知道是否可以改用System ID字段,因为这里的所有计算机上都一样:

代码的相关部分在这里:

如果不是IsObject(SAPguiApp),则
出错时恢复下一个
设置SAPguiAuto = GetObject(" SAPGUI")
如果Err.Number <> 0则
出错时转到0
设置WshShell = CreateObject(" WScript.Shell")
设置oExec = WshShell.Exec(" C:\ Program Files(x86)\ SAP \ FrontEnd \ SAPgui \ saplogon.exe")

不是WshShell.AppActivate(" SAP Logon 750")
睡眠1
循环
设置SAPguiAuto = GetObject(" SAPGUI")
其他
出错时转到0
结束If
设置SAPguiApp = SAPguiAuto.GetScriptingEngine
结束,如果
如果不是IsObject(Connection),则
设置连接= SAPguiApp.OpenConnection(" 此处为字符串",为True)
如果If
If不是IsObject(session),则结束。
设置会话= Connection.Children(0)
如果,则

结束。

如果session.Children.Count> 1,则
session.findById(" wnd [1]/usr/radMULTI_LOGON_OPT2")。选择
session.findById(" wnd [1]/usr/radMULTI_LOGON_OPT2") .SetFocus
session.findById(" wnd [1]/tbar [0]/btn [0]")。按
如果结束

我还包括了允许多个会话的部分,因为我花了很长时间才弄清楚今天该怎么做,这可能对某人有所帮助。

付费偷看设置
发送
4条回答
宇峰
1楼-- · 2020-09-22 18:14

马克你好,

我的建议是使用替代方法。 尝试使用IP地址和系统编号,而不是系统说明,例如 像这样

'----------------------------------------------  --------------------- 
'-/H/和系统的IP地址
'-/S/3200 +系统号, 在此示例中2
'------------------------------------------ ------------------------- 设置连接= SAPguiApp.OpenConnectionByConnectionString("/img/H/10.100.200.300/S/3202",对,错)

IP地址和系统号始终相同。 要获取系统编号,请使用TAC SE37调用FM GET_SYSTEM_NUMBER。

干杯
Stefan

空代码
2楼-- · 2020-09-22 18:25

顺便说一句,与您关于检测多个孩子的评论有关。

有一些方法可以将脚本附加到现有会话,但是您也可以通过这种方式测试屏幕元素。

'检查"意外"弹出窗口,即测试屏幕元素的存在。 如果没有任何内容,则不会使脚本崩溃。
 不做时session.findById(" wnd [1]",False)什么都没有
     如果不是session.findById(" wnd [1]/usr/radMULTI_LOGON_OPT3",False)则为空
 '决定如果允许多次登录,该怎么办
 如果1 = 2,则"这里有一些有意义的if语句,或者只是用它来随意决定。
 session.findById(" wnd [1]/usr/btnBUTTON_2")。按
 其他
 session.findById(" wnd [1]/usr/btnBUTTON_3")。按
 万一
     万一
 '其他一些测试以嵌套测试的存在为例。
     如果不是session.findById(" wnd [1]/usr/btnSPOP-OPTION2",False)则为空
         session.findById(" wnd [1]/usr/btnSPOP-OPTION2")。press
     万一
 循环
 

只需将ID替换为各种情况所需的ID。

SAP小菜
3楼-- · 2020-09-22 18:22

您好Stefan,

感谢您的建议,但是,我们有些限制性的政策似乎意味着我无权使用t代码SE37。 在其他地方可以找到该值吗?

再次感谢!

标记

三十六小时_GS
4楼-- · 2020-09-22 18:17

很抱歉回复很长! 不幸的是,不,我也无法访问SM51! 我确实到处找了您提到的文件,似乎大多数的配置文件都存储在本地,但是我找不到特定的文件。 但是,我认为我找到了一个简单的解决方法; 我将其添加到vb脚本的登录部分的末尾:

如果session.Children.Count> 1然后
     session.findById(" wnd [1]/usr/radMULTI_LOGON_OPT2")。Select
     session.findById(" wnd [1]/usr/radMULTI_LOGON_OPT2")。SetFocus
     session.findById(" wnd [1]/tbar [0]/btn [0]")。按
 如果结束

...并且已经解决了这个问题,现在它只是模拟选择创建另一个会话的用户选项,默认情况下它似乎变为活动会话,因此可以正常工作。 我在这里只能想到的唯一弱点是,如果已经打开了最大数量的会话,则可能会崩溃,但是有人不太可能让这么多会话保持活动状态,因此我可以继续使用它。

一周热门 更多>