测试 Excel 单元格是否为空



我在SAPGUI脚本下面创建了用于创建PO的脚本。

该脚本在大多数情况下都运行良好。但是我想进一步改进它。

第一个问题:

例如,如果脚本在流程中途停止,则您有一个包含 50 种材料的列表(Excel 输入表(,您需要为其创建相同数量的 PO。例如,如果脚本在物料编号 30 处停止,我不能再次启动脚本,因为它将再次从头开始,但这些材料的 PO 已经创建。

现在,正如您在代码中看到的那样,该脚本在创建 PO 后每行的第 6 列中放入注释"已完成":objSheet.Cells(i, 6) = "Finished"

它还从 SAP 获取创建的 PO 编号,并将其放在旁边的列(第 7 列(中:objSheet.Cells(i, 7).Value = Mid(session.findById("wnd[0]/sbar").Text, 38)

我想添加一个"if 代码",说如果第 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

以上是输入记录 3 次,然后是保存。 如果此保存不成功,我想添加到脚本中,它会再按一次保存。有时脚本只是在此步骤停止。但是,如果再次手动按下"保存",则会保存并创建 PO。我不知道为什么脚本有时会在此步骤停止,但对于某些材料,它确实如此。同样,脚本填充了所有内容,剩下的就是按保存,如果发生此问题,这就是我所做的。所以我手动保存 PO 并将 PO 编号放入 Excel 输入表中,由于我们解决了第一个问题,我可以再次重新启动脚本,它将从第 7 列的第一个空单元格再次继续(如果是 isEmpty(objSheet.cells(i,7(( 然后(。

所以我希望脚本仅在第一次保存不成功时才按保存。如果我要添加session.findById("wnd[0]/tbar[0]/btn[11]").press两次,如果第一次保存成功,脚本将停止。然后对于第二次保存,SAP会说没有什么要保存的,因此脚本将由于这个意外的事件/消息而停止工作。因此,如果可能的话,我希望脚本在第一次保存不成功时只按保存一次。基本上是一个代码,说明第一次保存后如果错误,然后再次重复保存。

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:SCRIPTPlOrCreationLog.txt")
next
msgbox "Process Completed Forza Juve! :)"
REM FINALIZATION CONTROL CHECK ************************

您可以使用If IsEmpty(objSheet.cells(i,7)) Then测试第i行和第7列中的单元格是否为空。

例如:

...
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:SCRIPTPlOrCreationLog.txt")
end if
next
...

问候, 脚本人

相关内容

最新更新