【问题标题】:How to select current row in SAP GUI Grid View with VBA Macro?如何使用 VBA 宏在 SAP GUI 网格视图中选择当前行?
【发布时间】:2018-04-18 07:51:01
【问题描述】:

我正在尝试自动执行 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 = ""?

【问题讨论】:

    标签: vba sap-gui


    【解决方案1】:

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

    其次,关于这个问题,你有一个shell,类型为GuiShell,它继承自GuiGridViewGuiGridView 看起来像一个表格,一组经典的 Excel 行和列。在您的交易中,向您显示一个大订单列表,您可以在其中单击“查找”按钮,输入您要查找的订单,然后关闭搜索窗口。回到你的(Grid)Shell,这个单元格已经被选中(Grid有属性SelectedCellsSelectedRowsSelectedColumns,当你去寻找东西时,这些属性都会设置好),但是你去修改@987654328的值@ 到一个特定的。

    是的,找到后,一个单元格已被选中,因此您只需查询其行,然后将其分配到您需要的位置:

    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 库的帮助,请随时发布一些新帖子并在 cmets 上联系我。

    【讨论】:

    • 非常感谢。我一定会接受您对未来查询的帮助,因为我们当前的 SAP 实施还有很多不足之处,我无疑会回来。
    • 嗨,当我出于某种原因执行此操作时,它不会选择整行,当我运行脚本时,光标会突出显示该行旁边的块(如果要选择它,您会单击它手动)带有虚线方形轮廓,但它好像没有然后“单击”以选择并突出显示实际行。然后脚本在 session.findById("wnd[0]/tbar[1]/btn[14]").press 处中断
    • @Logan9Fingers,我刚刚检查了它在我的代码库中的确切位置,就像我说的那样,我现在稍微清理了一下。我认为也许您还想特别选择一个单元格,而不仅仅是行。 GuiGridView 中有名为“SetCurrentCell”和“PressButton”的函数,它们都将行号和列名作为参数(顺便说一下,.ColumnOrder 也会告诉你列名),你可以探索一下。顺便说一句,您在该行遇到了什么错误?
    • 现在可以使用了。我不知道我做错了什么。感谢更新,非常感谢。
    • 如果有机会请您回答这个问题? stackoverflow.com/questions/50130754/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多