【问题标题】:Code for deleting specific rows / line items删除特定行/行项目的代码
【发布时间】:2019-09-28 11:14:47
【问题描述】:

我创建了一个脚本来删除 SAP 中的采购订单。只要 PO 包含一个行项目,脚本就相当简单。但是,如果我的 PO 包含多个行项目,并且我只想删除 PO 上的特定项目/行怎么办?

附上一张 SAP 中包含 4 个行项目的采购订单的图片。记录我的脚本以删除等于 line = (session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1) 的第二行项目(第 20 项) :SAPLMEGUI:1211/tblSAPLMEGUITC_1211").getAbsoluteRow(1).selected = true

现在,我需要创建一个脚本,该脚本从 Excel 工作表中获取有关要访问的 PO(列 1)和删除该 PO 上的行项目(列 2)的信息,然后获取下一个 PO 并执行相同的操作,直到循环结束完成了。

If Not IsObject(application) Then
Set SapGuiAuto  = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session    = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session,     "on"
WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").maximize


Dim objExcel
Dim objSheet, intRow, i
Set objExcel = GetObject(,"Excel.Application")
Set objSheet = objExcel.ActiveWorkbook.ActiveSheet

For i = 2 to objSheet.UsedRange.Rows.Count
COL1 = Trim(CStr(objSheet.Cells(i, 1).Value)) 'Column1


session.findById("wnd[0]/tbar[0]/okcd").text = "/nme22n"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[17]").press
session.findById("wnd[1]/usr/subSUB0:SAPLMEGUI:0003/ctxtMEPO_SELECT-EBELN").text = Col1
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211").getAbsoluteRow(1).selected = true
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/btnMEPO1211-STATUSICON[0,1]").setFocus
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/btnDELETE").press
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
session.findById("wnd[0]/tbar[0]/btn[11]").press
session.findById("wnd[1]/usr/btnSPOP-VAROPTION1").press
session.findById("wnd[0]/tbar[1]/btn[17]").press



aux=col1
CreateObject("WScript.Shell").run("cmd /c @echo %date% %time% " & aux & " >> C:\SCRIPT\PlOrCreationLog.txt")
next

msgbox "Process Completed"

【问题讨论】:

标签: excel vba


【解决方案1】:

您可以尝试以下方法:

...
For i = 2 to objSheet.UsedRange.Rows.Count
COL1 = Trim(CStr(objSheet.Cells(i, 1).Value)) 'Column1
COL2 = Trim(CStr(objSheet.Cells(i, 2).Value)) 'Column2

session.findById("wnd[0]/tbar[0]/okcd").text = "/nme22n"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[17]").press
session.findById("wnd[1]/usr/subSUB0:SAPLMEGUI:0003/ctxtMEPO_SELECT-EBELN").text = Col1
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211").getAbsoluteRow(" & COL2 & ").selected = true
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/btnDELETE").press
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
session.findById("wnd[0]/tbar[0]/btn[11]").press
session.findById("wnd[1]/usr/btnSPOP-VAROPTION1").press
session.findById("wnd[0]/tbar[1]/btn[17]").press

aux=COL1 & " / " & COL2
CreateObject("WScript.Shell").run("cmd /c @echo %date% %time% " & aux & " >> C:\SCRIPT\PlOrCreationLog.txt")
next

msgbox "Process Completed"

问候,脚本人

【讨论】:

  • 直到今天我才能测试脚本,因为测试模块正在维护中。它不适用于“getAbsoluteRow(”&COL2&“)”行。相反,我尝试使用 "getAbsoluteRow(COL2)" 和 aux=COL1 & " " & COL2,它现在可以工作了。奇怪的是,我以为我在这里问问题之前测试了“getAbsoluteRow(COL2)”,但显然我没有......
猜你喜欢
  • 2019-07-20
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 2022-12-09
  • 2011-05-17
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多