Цикл пропускает последнюю строку при последовательном открытии и закрытии Excel для импорта данных в SAP - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь автоматизировать некоторые ежемесячные заказы на продажу вручную в SAP.Он открывает 2 рабочие книги Excel и импортирует информацию о продажах в SAP (транзакция va01).

Сценарий работает следующим образом:

  1. Открыть файл справки, получить адрес в Excel-файлы с информацией о продажах (в тесте я использую 3 строки адресов / файлов)
  2. Открыть файл информации о продажах с выбранным адресом (в тесте я использую 7 строк данных для копирования, всего 8 строк, включая строку имени вкаждый файл)
  3. Импортирует информацию о продажах в SAP (транзакция va01), проходит по каждой строке.
  4. Переход к следующему адресу в файле справки и повторение до завершения, а затем закрытие всего.

Проблема в том, что не вся информация копируется в SAP, последняя строка пропускается для всех, кроме последнего файла информации о продажах.

Я рассчитываю цикл для строк в файле информации о продажах, пропускаетпоследняя строка / закрывает книгу раньше, когда есть еще один файл информации о продажах, я очень плохо знаком с SAP и VBS и не могу найти хороший способ, чтобы цикл завершил добавление информации в SAP перед закрытием текущей открытой информациифии затем откройте следующий.

Спасибо за любую помощь / ввод для решения этой проблемы

If Not IsObject(application) Then
   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


Set xlapp = CreateObject("Excel.Application")

Dim xlhlpwb
Dim xlhlpsh
Dim xlwb
Dim xlsh
Dim Rw

'Adress to Help-file, open and select sheet 1
Set xlhlpwb = xlapp.Workbooks.Open("C:\tmp\help-file_test.xlsx")
Set xlhlpsh = xlhlpwb.Sheets(1)

'Loop for adresses to invoice data
for n = 1 to xlapp.ActiveCell.SpecialCells(11).Row
    m = 1 
    wbadress =  xlhlpsh.Cells(n,m).Value

'Open Workbook with invoice info and set worksheet to use, "Rw" is used in SAP to help insert the info
 Set xlwb = xlapp.Workbooks.Open("" & wbadress & "")
 Set xlsh = xlwb.Sheets(1)
 Rw = 0

'Fetch info per row in worksheet
 for i = 2 to xlapp.ActiveCell.SpecialCells(11).Row
   for j = 1 to xlapp.ActiveCell.SpecialCells(11).Column 
      if j=22 then ARTICLE =  xlsh.Cells(i,j).Value 
      if j=23 then AMOUNT =  xlsh.Cells(i,j).Value
      if j=25 then INFO =  xlsh.Cells(i,j).Value
   next

'Add info to SAP transaction (va01-"create invoice")
  session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY:SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/tblSAPMV45ATCTRL_U_ERF_AUFTRAG/ctxtRV45A-MABNR[1,"& Rw &"]").text = ARTICLE
  session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY:SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/tblSAPMV45ATCTRL_U_ERF_AUFTRAG/txtRV45A-KWMENG[2,"& Rw &"]").text = AMOUNT
  session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY:SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/tblSAPMV45ATCTRL_U_ERF_AUFTRAG/txtVBKD-BSTKD[27,"& Rw &"]").text = INFO
  session.findById("wnd[0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY:SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/subSUBSCREEN_BUTTONS:SAPMV45A:4050/btnBT_POAN").press

'To make sure the right row in SAP is selected for next row in loop
  Rw = 1

 next

 xlwb.Close True
 Set xlsh = Nothing
 Set xlwb = Nothing
next


Set xlwb = Nothing
Set xlsh = Nothing
xlhlpwb.Close True
Set xlhlpwb = Nothing
Set xlhlpsh = Nothing
xlapp.Quit
set xlapp = Nothing
Rw = 0
...