Проверьте, пуста ли ячейка Excel - PullRequest
0 голосов
/ 14 февраля 2020

Я создал ниже скрипт SAP GUI для создания ПО.

Скрипт работает нормально в большинстве случаев. Однако я хотел бы улучшить его немного больше.

Первый вопрос:

Например, если сценарий останавливается в середине процесса, если у вас есть список ( Входной лист Excel) из 50 материалов, для которых необходимо создать одинаковое количество заказов на поставку. Если сценарий останавливается, например, на материале № 30, я не могу просто запустить сценарий снова, потому что он начнется снова с самого начала, но PO для этих материалов уже созданы.

Теперь, как вы можете видеть в коде, скрипт помещает комментарий «Завершено» в столбец 6 в каждой строке после создания заказа: objSheet.Cells(i, 6) = "Finished"

Он также выбирает созданный номер заказа из SAP и помещает его в столбец рядом с ним (столбец 7): objSheet.Cells(i, 7).Value = Mid(session.findById("wnd[0]/sbar").Text, 38)

Я хотел бы добавить «если код», говорящий, что если есть номер PO в столбце 7, который пропускает эти строки из входной лист Excel и вместо него go до следующей строки, для которой ячейка в столбце 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 раза с последующим сохранением. Я хотел бы добавить к сценарию, если это сохранение не удастся, что нажимает сохранить еще раз. Иногда сценарий просто останавливается на этом шаге. Однако, если сохранить еще раз вручную, PO сохраняется и создается. Я понятия не имею, почему сценарий иногда останавливается на этом шаге, но для определенных материалов это происходит. Снова все заполняется сценарием, и все, что осталось, это нажать «сохранить», что я и делаю, если возникает эта проблема. Поэтому я сохраняю заказ вручную и помещаю номер заказа в лист ввода Excel, и, поскольку мы решили первую проблему, я могу просто перезапустить сценарий, и он продолжится снова с первой пустой ячейки в столбце 7 (если isEmpty (objSheet.cells (i, 7). )) затем).

Поэтому я бы хотел, чтобы скрипт нажимал Сохранить, только когда первое сохранение не удалось. Если я добавлю 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 Ответ

1 голос
/ 14 февраля 2020

Вы можете проверить, является ли ячейка в строке 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
...

Regards, ScriptMan

...