我在SAPGUI脚本下面创建了用于创建PO的文件。
该脚本在大多数情况下都能正常工作。但是,我想进一步改善它。
第一个问题:
例如,如果脚本在流程的中间停止,则您有一个清单(Excel输入表)包含50种材料,您需要为其创建相同数量的PO。例如,如果脚本在材料编号30处停止,我将无法再次启动脚本,因为它将再次从头开始,但是已经创建了这些材料的采购订单。
现在在代码中可以看到,脚本在创建PO后在每行的第6列中添加注释“ Finished”:objSheet.Cells(i, 6) = "Finished"
它也从SAP获取创建的PO编号,并将其放在它旁边的列中(第7列):objSheet.Cells(i, 7).Value = Mid(session.findById("wnd[0]/sbar").Text, 38)
我想添加一个“ if code”,表示如果第7列中有PO编号,则跳过excel输入表中的那些行,而是转到第7列中的单元格为空的下一行。
第二个问题:
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[0]/btn[11]").press
以上是Enter记录的3次,然后保存。 如果此保存操作不成功,我想添加到脚本,请按此按钮再保存一次。有时脚本仅在此步骤停止。但是,如果再手动按一次Save,则保存并创建PO。我不知道为什么脚本有时会在这一步停止,但对于某些材料却会停止。再次,所有内容都由脚本填充,剩下的就是按保存,如果发生此问题,我该怎么办。因此,我手动保存了采购订单并将采购订单编号放入Excel输入表中,由于我们解决了第一个问题,因此我可以再次重新启动脚本,它将从第7列中的第一个空单元格再次继续(如果isEmpty(objSheet.cells(i,7 )))。
因此,我希望脚本仅在首次保存失败时才按Save。如果我要一次连续两次添加session.findById("wnd[0]/tbar[0]/btn[11]").press
,则在第一次保存成功后,脚本将停止。然后,对于第二次保存,SAP会说没有要保存的内容,因此,由于该意外事件/消息,脚本将停止工作。因此,如果可能的话,我希望脚本在第一次保存失败时仅再按一次保存一次。基本上,一个代码在第一次保存后会说iferror,然后再次重复保存。
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
REM ADDED BY EXCEL *************************************
Dim objExcel
Dim objSheet, intRow, i
Set objExcel = GetObject(,"Excel.Application")
Set objSheet = objExcel.ActiveWorkbook.ActiveSheet
For i = 2 to objSheet.UsedRange.Rows.Count
COL2 = Trim(CStr(objSheet.Cells(i, 2).Value)) 'Column2 Agreement number
COL3 = Trim(CStr(objSheet.Cells(i, 3).Value)) 'Column3 Agreement Line Item
COL4 = Trim(CStr(objSheet.Cells(i, 4).Value)) 'Column4 PO Quantity
COL5 = Trim(CStr(objSheet.Cells(i, 5).Value)) 'Column5 Delivery date
REM ADDED BY EXCEL *************************************
session.findById("wnd[0]/tbar[0]/okcd").text = "/nme21n"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0013/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/ctxtMEPO1211-KONNR[29,0]").text = COL2
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0013/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/txtMEPO1211-KTPNR[30,0]").text = COL3
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0013/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/txtMEPO1211-KTPNR[30,0]").setFocus
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0013/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/txtMEPO1211-KTPNR[30,0]").caretPosition = 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0020/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/txtMEPO1211-MENGE[6,0]").text = COL4
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0020/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/ctxtMEPO1211-EEIND[9,0]").text = COL5
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0020/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/ctxtMEPO1211-EEIND[9,0]").setFocus
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0020/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/ctxtMEPO1211-EEIND[9,0]").caretPosition = 0
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0020/subSUB2:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1211/tblSAPLMEGUITC_1211/txtMEPO1211-MENGE[6,0]").text = COL4
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[0]/btn[11]").press
objSheet.Cells(i, 6) = "Finished"
objSheet.Cells(i, 7).Value = Mid(session.findById("wnd[0]/sbar").Text, 38)
REM FINALIZATION CONTROL CHECK ************************
aux=col2 & " " & col3 & " " & col4 & " " & col5
CreateObject("WScript.Shell").run("cmd /c @echo %date% %time% " & aux & " >>
C:\SCRIPT\PlOrCreationLog.txt")
next
msgbox "Process Completed Forza Juve! :)"
REM FINALIZATION CONTROL CHECK ************************
答案 0 :(得分:1)
您可以使用i
测试行7
和列If IsEmpty(objSheet.cells(i,7)) Then
中的单元格是否为空。
例如:
...
For i = 2 to objSheet.UsedRange.Rows.Count
if isEmpty(objSheet.cells(i,7)) then
COL2 = Trim(CStr(objSheet.Cells(i, 2).Value)) 'Column2 Agreement number
...
CreateObject("WScript.Shell").run("cmd /c @echo %date% %time% " & aux & " >>
C:\SCRIPT\PlOrCreationLog.txt")
end if
next
...
关于ScriptMan,