【问题标题】:Store the row number in a VBS script as variable and refer to it将 VBS 脚本中的行号存储为变量并引用它
【发布时间】:2018-05-13 12:17:05
【问题描述】:

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

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

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

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

有人可以帮我解决这个问题吗?如果行号的可能性数量有限,我会使用 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\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

【问题讨论】:

    标签: excel vba sap-gui


    【解决方案1】:

    您不使用变量 row 作为变量,而是使用字符串“row”。查看规则 #5 here 。 “行”对 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 scripting

    【讨论】:

    • 非常感谢 Storax!这非常有效!我一定会阅读更多关于这个主题的内容。
    猜你喜欢
    • 2020-08-06
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2015-09-27
    • 2021-07-20
    • 2016-07-10
    • 2022-01-23
    相关资源
    最近更新 更多