FS10N,如何在 excel VBA 中使用脚本按名称选择布局?

FS10N, how to choose layout by name with script in excel VBA?

我正在 Excel VBA 中编写代码以自动从 SAP FS10N 报告下载数据。 我现在遇到的唯一问题是我找不到 select 我不想通过布局名称使用的布局的任何解决方案。这是我发现的解决方案的代码行,但它对我不起作用:

Session.findById("wnd[1]/usr/ssubD0500_SUBSCREEN:SAPLSLVC_DIALOG:0501/cntlG51_CONTAINER/shellcont/shell")

知道如何继续吗?

编辑: 这是我无法访问显示可用布局的弹出窗口 window 的代码部分。所以我不能 select 任何布局的名称,只有脚本记录器保存我手动保存的方式:

session.findById("wnd[0]/tbar[1]/btn[33]").press
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]/usr/lbl[1,12]").setFocus
session.findById("wnd[1]/usr/lbl[1,12]").caretPosition = 3
session.findById("wnd[1]").sendVKey 2

重复的第 2-5 行显示了我向上滚动列表的位置。

编辑2: 这是我的脚本在录制时的样子:

If Not IsObject(application) Then
   Set SapGuiAuto  = GetObject("SAPGUI")
   Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
   Set connection = application.Children(0)
End If
If Not IsObject(session) Then
   Set session    = connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject session,     "on"
   WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "fs10n"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtSO_SAKNR-LOW").text = "884050"
session.findById("wnd[0]/usr/txtGP_GJAHR").text = "2020"
session.findById("wnd[0]/usr/txtGP_GJAHR").setFocus
session.findById("wnd[0]/usr/txtGP_GJAHR").caretPosition = 4
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/usr/cntlFDBL_BALANCE_CONTAINER/shellcont/shell").setCurrentCell 1,"BALANCE"
session.findById("wnd[0]/usr/cntlFDBL_BALANCE_CONTAINER/shellcont/shell").selectedRows = "1"
session.findById("wnd[0]/usr/cntlFDBL_BALANCE_CONTAINER/shellcont/shell").doubleClickCurrentCell
session.findById("wnd[0]/tbar[1]/btn[33]").press

'My problem starts here

session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]/usr/lbl[1,12]").setFocus
session.findById("wnd[1]/usr/lbl[1,12]").caretPosition = 2
session.findById("wnd[1]").sendVKey 2

我不想以某种方式替换最后七行。我不想以某种方式 select 在对话框中按名称布局。我希望现在更清楚了。

编辑3: 我的评论上方的行: session.findById("wnd[0]/tbar1/btn[33]").press 打开布局 select 对话框:

单击按钮后,将打开此对话框:

代码的最后 7 行是我向上滚动 4 次的手动步骤,selecting 想要的布局。记录器没有帮我识别对话框。

在 ALV 布局选择屏幕中,如果您知道要 select 的布局名称,请执行以下操作序列:

  1. 给出布局的初始列表,单击查找按钮:

  2. 输入布局名称,取消select复选框"Starting at current line"搜索所有行,然后按回车键:

  3. 结果应该总是在第一行显示布局,点击它:

  4. 所有布局的列表应该在右行滚动并且光标在正确的位置,按下键F2:

以上所有动作对应以下代码(由脚本记录器返回):

session.findById("wnd[0]").resizeWorkingPane 158,25,false
session.findById("wnd[0]/tbar[1]/btn[33]").press
session.findById("wnd[1]/tbar[0]/btn[71]").press
session.findById("wnd[2]/usr/chkSCAN_STRING-START").selected = false
session.findById("wnd[2]/usr/txtRSYSF-STRING").text = "/SAP-GLVIEW"
session.findById("wnd[2]/usr/chkSCAN_STRING-START").setFocus
session.findById("wnd[2]/tbar[0]/btn[0]").press
session.findById("wnd[3]/usr/lbl[1,2]").setFocus
session.findById("wnd[3]/usr/lbl[1,2]").caretPosition = 0
session.findById("wnd[3]").sendVKey 2
session.findById("wnd[1]").sendVKey 2