【发布时间】:2026-02-10 09:10:02
【问题描述】:
我想打开 2 个 SAP GUI 窗口并设置相同的事务,但上面有不同的信息。
我知道使用 VBA/VBS 不可能同时运行这些窗口(就像我在这里看到的其他帖子一样),但我不需要它运行,我只需要使用不同信息设置每个窗口的脚本。我可以在设置后手动运行它。
我编写了以下代码:
Sub YI19Nreport()
Dim app As Object
Dim connection As Object
Dim session As Object
Dim plant As String
Set SapGuiAuto = GetObject("SAPGUI")
Set app = SapGuiAuto.GetScriptingEngine
Set connection = app.Children(0)
Set session = connection.Children(0)
Set objExcel = GetObject(, "Excel.Application")
Set objSheet = objExcel.Workbooks("Book1.xlsm").Sheets("Sheet1")
'''''Opening first YI19N
session.ActiveWindow().findById("wnd[0]/tbar[0]/okcd").Text = "/nyi19n"
session.ActiveWindow().findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/btn%_S_WERKS_%_APP_%-VALU_PUSH").press
plant = Workbooks("Book1.xlsm").Sheets("Sheet1").Cells(2, 4)
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,0]").Text = plant
session.findById("wnd[1]/tbar[0]/btn[8]").press
'''''Opening second YI19N
session.ActiveWindow().findById("wnd[0]/tbar[0]/okcd").Text = "/oyi19n"
session.ActiveWindow().findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/btn%_S_WERKS_%_APP_%-VALU_PUSH").press
plant = Workbooks("Book1.xlsm").Sheets("Sheet1").Cells(3, 4)
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,0]").Text = plant
session.findById("wnd[1]/tbar[0]/btn[8]").press
End Sub
使用此代码,SAP 打开第一个窗口,输入信息,而不是打开第二个窗口,而是使用第二个窗口所需的字符串完成第一个窗口信息,然后打开第二个窗口并完成 Sub。
我认为这与在 Sub 开头设置的“children”信息有关。
如果有人可以帮助我,那就太好了。
【问题讨论】:
-
你知道那个“第二个窗口”的ID吗? “第二个”需要哪个字符串? “/oyi19n”?
-
@FaneDuru 字符串“/o...”触发新窗口打开,“...yi19n”是我使用的事务。
-
@SandraRossi 抱歉,我是 SAP/VBA 脚本的新手。我没明白你说的事件是什么意思,是编码吗?
-
您是否先尝试“/o”,创建一个新会话,然后设置事务?
-
@FaneDuru 是的!我尝试只打开会话,但它一直忽略此命令,在同一会话上完成版本,然后打开新会话(没有事务)。
标签: excel vba scripting sap-gui