测试Excel单元格是否为空

时间:2020-02-14 09:43:32

标签: excel vba sap-gui

我在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 ************************

1 个答案:

答案 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,