如何使用 VBA 宏 select SAP GUI 网格视图中的当前行?

How to select current row in SAP GUI Grid View with VBA Macro?

我正在尝试在 SAP GUI 中自动执行一项重复性任务。我需要搜索一个订单号,select 订单号所在的行,然后单击一个按钮来完成任务。我录制了一个宏,它给了我:

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 = ""?

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

其次,关于这个问题,你有一个shell,类型GuiShell,继承自GuiGridViewGuiGridView 看起来像 table,一组经典的类似于 Excel 的行和列。在您的交易中,显示了一个大订单列表,您可以在其中单击 "Find" 按钮,输入您要查找的订单,然后关闭搜索 Window。回到您的 (Grid)Shell,此单元格已被选中(Grid 具有属性 SelectedCellsSelectedRowsSelectedColumns,当您去查找某些内容时,这些属性将全部设置好),但是然后你去修改 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 库的帮助,请随时制作一些新的 post 并在有关它的评论中联系我。