我正在尝试在SAP GUI中自动执行重复性任务。我需要搜索订单号,选择订单号所在的行,然后单击按钮完成任务。我录了一个宏给了我:
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/cntlCONTAINER/shellcont/shell").pressToolbarButton "&FIND"
session.findById("wnd[1]/usr/txtGS_SEARCH-VALUE").text = "4521305207"
session.findById("wnd[1]/usr/txtGS_SEARCH-VALUE").caretPosition = 10
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[12]").press
session.findById("wnd[0]/usr/cntlCONTAINER/shellcont/shell").currentCellColumn = ""
session.findById("wnd[0]/usr/cntlCONTAINER/shellcont/shell").selectedRows = "2894"
session.findById("wnd[0]/tbar[1]/btn[14]").press
session.findById("wnd[1]/usr/chk[1,6]").selected = true
该行:
session.findById("wnd[1]/usr/txtGS_SEARCH-VALUE").text = "4521305207"
对应于我想要搜索的顺序,但如果我更改此值,它仍会尝试处理记录宏的相同顺序,我假设因为该行:
session.findById("wnd[0]/usr/cntlCONTAINER/shellcont/shell").selectedRows = "2894"
有谁知道如何找到与SEARCH-VALUE结果相对应的行号,然后将其用作.selectedRows =""?
答案 0 :(得分:0)
首先,我建议您添加对本机SAP库的引用。转到VBA编辑器,单击工具,然后单击引用,然后单击浏览,找到此文件:" C:\ Program Files \ SAP \ FrontEnd \ SAPgui \ sapfewse.ocx"。添加它,现在您将拥有类型和库,并且SAP的编码将更容易,更安全,并且速度更快(VBA中的变体类型会产生很小的开销,在这种情况下完全没必要)。如果要多次执行任何SAP脚本,请熟悉此新库。
其次,关于这个问题,你所拥有的是GuiShell
类型的shell,它继承自GuiGridView
。 GuiGridView
看起来像一个表,一组类似于Excel的经典行和列。在您的交易中,向您显示一个大订单列表,您可以在其中点击"查找"按钮,输入您要查找的订单,然后关闭搜索窗口。回到你的(网格)外壳,这个单元格已被选中(网格有属性SelectedCells
,SelectedRows
,SelectedColumns
,当你找到的东西时,它们会全部设置好),但是你去了将SelectedRows
的值修改为特定的值。
所以是的,在找到时,已经选择了一个单元格,所以您只需查询其行,然后将其分配到您需要的位置:
Dim numrRow As Long
numrRow = session.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell").CurrentCellRow
session.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell").SelectedRows = numrRow
其中" thisShell"但是你要找到对Shell的引用(例如session.findByID("blabla")
,但我建议减少所有的findByID,它们非常慢且类型不安全)。
如果您需要有关此SAP库的帮助,请随时发布一些新帖子并对我发表评论。