Я пишу сценарий из VBA и использую записанное действие в SAP ABAB. Я хочу, чтобы скрипт вводил определенную транзакцию, вставлял определенное значение (номер контракта), а затем переходил к определенной строке таблицы, дважды щелкал по ней и выполнял определенное действие внутри.
Я использую цикл while в VBA, а в листе Excel я сохраняю номер контракта, номер строки, в которой скрипт должен дважды щелкнуть мышью, а затем вставить нужное мне значение после его ввода. Это следует делать до тех пор, пока ячейки в столбце a не станут пустыми.
Код:
«Мы объявили параметр для функции while в excel
Dim cont As String
Dim row As Integer
Dim rep As String
Dim j As Integer
j = 2
With ThisWorkbook
While Cells(j, 1) <> ""
cont = Cells(j, 1).Value
row = Cells(j, 3).Value
rep = Cells(j, 4).Value
Set SapGuiAuto = GetObject("SAPGUI")
Set SAPApp = SapGuiAuto.GetScriptingEngine
Set SAPCon = SAPApp.Children(0)
Set Session = SAPCon.Children(0)
If IsObject(WScript) Then
WScript.ConnectObject Session, "on"
WScript.ConnectObject Application, "on"
End If
Session.findById("wnd[0]").maximize
Session.findById("wnd[0]/usr/ctxtVBAK-VBELN").Text = cont
Session.findById("wnd[0]/usr/ctxtVBAK-VBELN").caretPosition = 8
Session.findById("wnd[0]").sendVKey 0
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY:SAPMV45A:4426/subSUBSCREEN_TC:SAPMV45A:4908/tblSAPMV45ATCTRL_U_ERF_KONTRAKT/ctxtVBAP-KDMAT[5,row]").SetFocus
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY:SAPMV45A:4426/subSUBSCREEN_TC:SAPMV45A:4908/tblSAPMV45ATCTRL_U_ERF_KONTRAKT/ctxtVBAP-KDMAT[5,row]").caretPosition = 6
Session.findById("wnd[0]").sendVKey 2
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_ITEM/tabpT\10").Select
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_ITEM/tabpT\10/ssubSUBSCREEN_BODY:SAPMV45A:4454/ctxtVBAP-KDMAT").Text = rep
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_ITEM/tabpT\10/ssubSUBSCREEN_BODY:SAPMV45A:4454/ctxtVBAP-KDMAT").SetFocus
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_ITEM/tabpT\10/ssubSUBSCREEN_BODY:SAPMV45A:4454/ctxtVBAP-KDMAT").caretPosition = 3
Session.findById("wnd[0]/tbar[0]/btn[11]").press
j = j + 1
Wend
End With
Вы можете видеть в части кода VBS, я пытался заменить номер строки на переменную "строка", но код не принимает это.
Если я оставляю число там, оно фактически делает то, что я хочу, пока число является правильным для того, что я пытаюсь сделать.
Может ли кто-нибудь помочь мне с этим? Я обхожу это с тем, если в операторах должно быть ограничено количество возможностей для номера строки, но это может означать очень длинный код, и что-то может быть пропущено.
Можно ли сделать так, чтобы номер строки ссылался на переменную в коде.
Я уже пытался объявить переменную в VBS, но она также не работает.