Сохраните номер строки в сценарии VBS как переменную и обратитесь к ней - PullRequest
0 голосов
/ 13 мая 2018

Я пишу сценарий из 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, но она также не работает.

1 Ответ

0 голосов
/ 13 мая 2018

Вы не используете переменную строку в качестве переменной, вместо этого вы используете строку «строка». Взгляните на правило # 5 здесь . «строка» ничего не значит для SAPGUI.

Попробуйте это

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," & CStr(Row) & "]").SetFocus

Это необходимо сделать и для второй строки.

Вы также используете неверное ключевое слово. Это не SAP ABAP, это SAPGUI-скриптинг .

...