将行号存储在 VBS 脚本中作为变量并引用它

Store the row number in a VBS script as variable and refer to it

我正在从 VBA 编写脚本并在 SAP GUI 屏幕中使用记录的操作。我想让脚本输入某个交易粘贴某个值(合约编号),然后转到table中的某个行,双击它并在里面做某个动作。

我在 VBA 中使用 while 循环,在 Excel sheet 中我存储合同号,脚本应该双击然后粘贴的行号输入后我需要的值。它应该这样做,直到 a 列中的单元格为空。

您可以在下面代码的 VBS 部分看到,我尝试用变量“行”替换行号,但代码不接受。

如果我在那里留下一个数字,它实际上会做我想做的,只要这个数字是我尝试做的正确的数字。

有人可以帮我解决这个问题吗?如果行号的可能性数量有限,我会使用 if 语句解决这个问题,但这可能意味着代码很长,并且可能会遗漏某些内容。

是否可以让行号引用代码中的变量。

我已经尝试过在 VBS 中声明变量,但效果不佳。

代码:

'We declared the parameter for the while function in 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/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/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").Select
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_ITEM/tabpT/ssubSUBSCREEN_BODY:SAPMV45A:4454/ctxtVBAP-KDMAT").Text = rep
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_ITEM/tabpT/ssubSUBSCREEN_BODY:SAPMV45A:4454/ctxtVBAP-KDMAT").SetFocus
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_ITEM/tabpT/ssubSUBSCREEN_BODY:SAPMV45A:4454/ctxtVBAP-KDMAT").caretPosition = 3
Session.findById("wnd[0]/tbar[0]/btn[11]").press

j = j + 1
Wend

End With

您不使用变量行作为变量,而是使用字符串 "row"。看看规则 #5 here 。 "row" 对 SAPGUI 没有任何意义。

试试这个

session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT/ssubSUBSCREEN_BODY:SAPMV45A:4426/subSUBSCREEN_TC:SAPMV45A:4908/tblSAPMV45ATCTRL_U_ERF_KONTRAKT/ctxtVBAP-KDMAT[5," & CStr(Row) & "]").SetFocus

您也需要对第二个字符串执行此操作。

你也用错了关键词。这不是 SAP ABAP,这是 SAPGUI scripting