1

我正在尝试自动化 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 =“”?

4

1 回答 1

1

首先,我真的建议您添加对本机 SAP 库的引用。转到您的 VBA 编辑器,依次单击工具、参考和浏览,找到此文件:“C:\Program Files\SAP\FrontEnd\SAPgui\sapfewse.ocx”。添加它,现在您将拥有类型和库,并且 SAP 的编码将变得更容易、更安全、更快(VBA 中的变体类型会产生很小的开销,在这种情况下是完全没有必要的)。如果您要多次编写任何 SAP 脚本,请熟悉这个新库。

其次,关于这个问题,你有一个 shell,类型为GuiShell,它继承自GuiGridView. GuiGridView看起来像一个表格,一组经典的 Excel 类行和列。在您的交易中,向您展示了一个大订单列表,您可以在其中单击“查找”按钮,输入您要查找的订单,然后关闭搜索窗口。回到您的 (Grid)Shell,此单元格已被选中(Grid 具有属性SelectedCells, SelectedRowsSelectedColumns当您查找某些内容时会全部设置),然后您将 的值修改为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 库的帮助,请随时发表一些新帖子,并在有关它的评论中联系我。

于 2018-04-18T08:13:30.410 回答