[英]How to execute SAP GUI Macro from VBA in Excel or Visual Studio?
[英]How to select current row in SAP GUI Grid View with VBA Macro?
我正在嘗試在 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 = ""?
首先,我真的建議您添加對本機 SAP 庫的引用。 轉到您的 VBA 編輯器,依次單擊“工具”、“引用”和“瀏覽”,然后找到此文件:“C:\\Program Files\\SAP\\FrontEnd\\SAPgui\\sapfewse.ocx”。 添加它,現在您將擁有類型和庫,並且 SAP 的編碼將更容易、更安全且速度更快(VBA 中的 Variant 類型會產生很小的開銷,在這種情況下是完全沒有必要的)。 如果您要多次編寫任何 SAP 腳本,請熟悉這個新庫。
其次,關於這個問題,你有一個 shell,類型為GuiShell
,它繼承自GuiGridView
。 GuiGridView
看起來像一個表格,一組經典的 Excel 式的行和列。 在您的交易中,向您顯示一個大的訂單列表,您可以在其中單擊“查找”按鈕,放置您要查找的訂單,然后關閉搜索窗口。 回到您的 (Grid)Shell,此單元格已被選中(Grid 具有屬性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 庫的幫助,請隨時發布一些新帖子,並在有關它的評論中聯系我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.