VBScript, нажмите кнопку Сохранить, чтобы продолжить Script - PullRequest
0 голосов
/ 27 июня 2018

У меня возникает определенная проблема с VBScript, когда я пытаюсь автоматизировать процедуру с помощью макроса VBA / VBS.

Он вводит номер контракта в VBS и выполняет некоторые стандартизированные изменения в VA03, но для некоторых есть некоторая неполная информация, затем появляется это всплывающее окно:

enter image description here

Я хочу, чтобы мой сценарий нажимал «Сохранить» и продолжал в случае, если это происходит для определенного номера контракта.

Он не работал с Applications.DisplayAlerts = False, а также, я думаю, он не будет работать с обработчиком ошибок, так как практически это не ошибка.

Это должно быть с простым утверждением IF, но я не знаю, как мне поставить формулировку.

Может кто-нибудь помочь, мои исследования в сети меня ни к чему не привели: (

Код (хотя он работает, мне нужен только кусок, который будет обрабатывать вышеуказанный стопор):

today = Format(Date, "dd.mm.yyyy")
   Application.DisplayAlerts = False
   'We declared the variables for the while function in excel
    Dim cont As String
    Dim row As Integer
Dim rep As String

Dim j As Integer
j = 2

'Those are the commands with which we make SAP available for the VBA code
Set SapGuiAuto = GetObject("SAPGUI")
  Set SAPApp = SapGuiAuto.GetScriptingEngine
  Set SAPCon = SAPApp.Children(0)
  Set Session = SAPCon.Children(0)

  If IsObject(WScript) Then
   WScript.ConnectObject Session, "on"
   WScript.ConnectObject Application, "on"
 End If

Session.findById("wnd[0]").maximize
Session.findById("wnd[0]/tbar[0]/btn[3]").press
Session.findById("wnd[0]/tbar[0]/btn[3]").press
Session.findById("wnd[0]/tbar[0]/okcd").Text = "va42"
Session.findById("wnd[0]").sendVKey 0


'We start the loop inside the macro book and give values to our variables
With ThisWorkbook
While Cells(j, 1) <> ""
cont = Cells(j, 1).Value
row = Cells(j, 3).Value
rep = Cells(j, 4).Value

' enter VBS code
'In this part we change the inst to REMV
Session.findById("wnd[0]").maximize
Session.findById("wnd[0]/usr/ctxtVBAK-VBELN").Text = cont
Session.findById("wnd[0]/usr/ctxtVBAK-VBELN").caretPosition = 8
Session.findById("wnd[0]").sendVKey 0
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY:SAPMV45A:4426/subSUBSCREEN_TC:SAPMV45A:4908/tblSAPMV45ATCTRL_U_ERF_KONTRAKT/ctxtVBAP-KDMAT[5," & CStr(row) & "]").SetFocus
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY:SAPMV45A:4426/subSUBSCREEN_TC:SAPMV45A:4908/tblSAPMV45ATCTRL_U_ERF_KONTRAKT/ctxtVBAP-KDMAT[5," & CStr(row) & "]").caretPosition = 6
Session.findById("wnd[0]").sendVKey 2

'change date
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_ITEM/tabpT\03").Select
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP/tabpT\03/ssubSUBSCREEN_BODY:SAPLV45W:4201/ctxtVEDA-VDEMDAT").Text = today
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP/tabpT\03/ssubSUBSCREEN_BODY:SAPLV45W:4201/ctxtVEDA-VDEMDAT").SetFocus
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP/tabpT\03/ssubSUBSCREEN_BODY:SAPLV45W:4201/ctxtVEDA-VDEMDAT").caretPosition = 10

'change INST to REMV
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP/tabpT\10").Select
Session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_ITEM/tabpT\10/ssubSUBSCREEN_BODY:SAPMV45A:4454/ctxtVBAP-KDMAT").Text = rep

'Deletes the first line in Technical Objects and saves the changes
Session.findById("wnd[0]/mbar/menu[3]/menu[9]").Select
Session.findById("wnd[0]/usr/tblSAPLIWOLOBJK_220").getAbsoluteRow(0).Selected = True
Session.findById("wnd[0]/tbar[1]/btn[19]").press
Session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
Session.findById("wnd[0]/tbar[0]/btn[3]").press
Session.findById("wnd[0]/tbar[0]/btn[11]").press

'we make sure the loop goes through every row and then end it
j = j + 1
Wend

End With
End Sub

С наилучшими пожеланиями, Михаил

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Я добавил решение, предложенное Script man выше! Работало отлично!

0 голосов
/ 28 июня 2018

Во-первых, я бы записал недостающий фрагмент программы VBS. Затем вы должны определить, где в основной программе этот фрагмент должен быть установлен. Но я подозреваю, что это произойдет после сохранения. Грубая структура может выглядеть так:

. . .
Session.findById("wnd[0]/tbar[0]/btn[11]").press
'------------------------------ new ---------------------------
on error resume next
'Suppose that's the missing piece of program
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
on error goto 0
'------------------------------ new ---------------------------
'we make sure the loop goes through every row and then end it
j = j + 1
Wend
. . .

С уважением, ScriptMan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...