无法绕过 SAP 连接中的 运行 时间错误 619

Not able to bypass Run time error 619 in SAP connection

我有一个宏可以将某些 SAP 报告下载到 Excel。我的问题是,如果我在同一个 SAP 会话中多次 运行 宏(第一次工作正常),我会收到 运行 时间错误 619,我无法绕过它。

出于某种原因(我认为这与用户登录的服务器有关),SAP 模块 (RE-FX) 有两个不同的 variants/GUIs。因此,根据 variant/GUI.

,我有两种不同的设置将报告下载到 Excel

我正在使用 On Error Goto 语句在这两个变体之间切换。 运行 时间错误出现在 On Error Goto 语句之后的行中。

如前所述,第一次我 运行 宏(没有 运行 时间错误发生并且宏按预期跳转到错误处理程序)时工作正常,但第二次我 运行它,出现错误'619',无法绕过它。

我试过这个post(包括Application.Wait)的解决方法: Cannot Bypass Error 619 [executing SAP from 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

试试这个...

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

感谢@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