Не удается обойти ошибку времени выполнения 619 в соединении SAP - PullRequest
2 голосов
/ 05 апреля 2019

У меня есть макрос для загрузки определенных отчетов SAP в Excel. Моя проблема заключается в том, что если я запускаю макрос более одного раза в одном и том же сеансе SAP (в первый раз он работает нормально), я получаю ошибку времени выполнения 619, которую не могу обойти.

По какой-то причине (я думаю, это связано с тем, на какой сервер пользователь вошел), модуль SAP (RE-FX) имеет два разных варианта / GUI. Поэтому у меня есть две разные настройки для загрузки отчета в Excel в зависимости от варианта / GUI.

Я использую оператор On Error Goto для переключения между этими двумя вариантами. Ошибка времени выполнения отображается в строке после оператора Перейти к ошибке.

Как уже упоминалось, это работает нормально при первом запуске макроса (ошибка Run Time не возникает, и макрос переходит к обработчику ошибок, как и ожидалось), но при втором запуске я вижу ошибку «619» и невозможно обойти это.

Я попробовал решение в этом посте (включая Application.Wait): Невозможно обойти ошибку 619 [выполнение SAP из VBA]

Но это не исправило это (здесь не проблема времени).

Sub Run_REISCDCF()

 Dim Filepath As String
 Dim ReportDate As String
 Dim SapGuiAuto As Object
 Dim SAPApp As Object
 Dim SAPCon As Object
 Dim session As Object


 Filepath = ThisWorkbook.Sheets("Guide").Cells(5, 5).Text   'place to store SAP reports

'Create connection to SAP
'------------------------------------------
Set SapGuiAuto = GetObject("SAPGUI")
Set SAPApp = SapGuiAuto.GetScriptingEngine
Set SAPCon = SAPApp.Children(0)
Set session = SAPCon.Children(0)
'------------------------------------------

'Removed some code to run the report and change layout (which works fine)

'Save to Excel
    session.findById("wnd[0]/usr/subSUB_AREA_ROOT:SAPLREIS_GUI_CONTROLLER:0200/subSUB_AREA:SAPLREIS_GUI_CONTROLLER:1000/cntlCC_LIST/shellcont/shell").pressToolbarContextButton "&MB_EXPORT"
    session.findById("wnd[0]/usr/subSUB_AREA_ROOT:SAPLREIS_GUI_CONTROLLER:0200/subSUB_AREA:SAPLREIS_GUI_CONTROLLER:1000/cntlCC_LIST/shellcont/shell").selectContextMenuItem "&XXL"

    On Error GoTo XLSX_variant 'SAP has two different GUI's for RE-FX with one of them only allowing to download to a MHTML file type
    session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "Filepath" '<-- At this line the Run Time error appears
    session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "REISCDCF.MHTML"
    session.findById("wnd[1]/tbar[0]/btn[11]").press
Exit Sub

XLSX_variant:
    session.findById("wnd[1]/tbar[0]/btn[0]").press
    session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "Filepath"
    session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "REISCDCF.XLSX"
    session.findById("wnd[1]/tbar[0]/btn[11]").press

Exit Sub

Ответы [ 2 ]

2 голосов
/ 07 апреля 2019

Попробуйте это ...

If Not session.findById("wnd[1]/tbar[0]/btn[0]", False) Is Nothing Then

session.findById("wnd[1]/tbar[0]/btn[0]").press

End If

Этот код будет искать кнопку в сеансе, в котором вы находитесь, и, если он найдет ее, он нажмет на нее, иначе это означает, что ее нет, и я продолжусо следующей строкой.

Sub Run_REISCDCF()

 Dim Filepath As String
 Dim ReportDate As String
 Dim SapGuiAuto As Object
 Dim SAPApp As Object
 Dim SAPCon As Object
 Dim session As Object


 Filepath = ThisWorkbook.Sheets("Guide").Cells(5, 5).Text   'place to store SAP reports

'Create connection to SAP
'------------------------------------------
Set SapGuiAuto = GetObject("SAPGUI")
Set SAPApp = SapGuiAuto.GetScriptingEngine
Set SAPCon = SAPApp.Children(0)
Set session = SAPCon.Children(0)
'------------------------------------------

'Removed some code to run the report and change layout (which works fine)

'Save to Excel
    session.findById("wnd[0]/usr/subSUB_AREA_ROOT:SAPLREIS_GUI_CONTROLLER:0200/subSUB_AREA:SAPLREIS_GUI_CONTROLLER:1000/cntlCC_LIST/shellcont/shell").pressToolbarContextButton "&MB_EXPORT"
    session.findById("wnd[0]/usr/subSUB_AREA_ROOT:SAPLREIS_GUI_CONTROLLER:0200/subSUB_AREA:SAPLREIS_GUI_CONTROLLER:1000/cntlCC_LIST/shellcont/shell").selectContextMenuItem "&XXL"

 'SAP has two different GUI's for RE-FX with one of them only allowing to download to a MHTML file type

If Not session.findById("wnd[1]/tbar[0]/btn[0]", False) Is Nothing Then

session.findById("wnd[1]/tbar[0]/btn[0]").press

End If

    session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "Filepath" '<-- At this line the Run Time error appears
    session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "REISCDCF.MHTML"
    session.findById("wnd[1]/tbar[0]/btn[11]").press

Exit Sub
1 голос
/ 24 апреля 2019

Спасибо @reFractil за то, что нашли решение, которое сработало! Мне пришлось немного отредактировать его решение, чтобы встроить два варианта (загрузить отчет SAP в формате .XLSX или .MHTML), но структура и код, предложенный reFractil, одинаковы:

'Changed code only below

'Save to Excel  

    session.findById("wnd[0]/usr/subSUB_AREA_ROOT:SAPLREIS_GUI_CONTROLLER:0200/subSUB_AREA:SAPLREIS_GUI_CONTROLLER:1000/cntlCC_LIST/shellcont/shell").pressToolbarContextButton "&MB_EXPORT"
    session.findById("wnd[0]/usr/subSUB_AREA_ROOT:SAPLREIS_GUI_CONTROLLER:0200/subSUB_AREA:SAPLREIS_GUI_CONTROLLER:1000/cntlCC_LIST/shellcont/shell").selectContextMenuItem "&XXL"

'Solution:    

If Not session.findById("wnd[1]/tbar[0]/btn[0]", False) Is Nothing Then 
    session.findById("wnd[1]/tbar[0]/btn[0]").press
    session.findById("wnd[1]/usr/ctxtDY_PATH").Text = Filepath
    session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "REISCDCF.XLSX" 'Download as .XLSX if in "XLSX SAP_variant"
    session.findById("wnd[1]/tbar[0]/btn[11]").press
    Exit Sub

End If

    session.findById("wnd[1]/usr/ctxtDY_PATH").Text = Filepath
    session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "REISCDCF.MHTML" 'Download as .MHTML if in "MHTML SAP_variant"
    session.findById("wnd[1]/tbar[0]/btn[11]").press
Exit Sub
...