SAP GUI Сценарии в Excel VBA - Ошибка 91 (Переменная объекта ...) - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь подключиться к SAP через Excel VBA для запуска записанного макроса.

Когда он достигает начала реального кода SAP, он помещает

Run-Time Ошибка '91'

в строке session.FindById("wnd[0]").Maximize.

Если я удалю эту строку, у нее будут одинаковые проблемы с каждой строкой сеанса.

Я проверил ссылки и объявления.

Я запустил его как скрипт VBS, и он работал.

Я вошел в сеанс SAP перед выполнением кода.

appl Ничего не содержит в значении Local Windows. На типе он содержит GuiApplication.

Вот фрагмент кода:

Private Sub CommandButton1_Click()
    Dim Tablename As String

    If TextBox1 = "" Then
        If Not IsObject(appl) Then
           Set SapGuiAuto = GetObject("SAPGUI")
           Set appl = SapGuiAuto.GetScriptingEngine
        End If
        If Not IsObject(Connection) Then
           Set Connection = appl.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
        session.FindById("wnd[0]/tbar[0]/okcd").Text = "Stock01"
        session.FindById("wnd[0]/tbar[0]/btn[0]").press
        session.FindById("wnd[0]/usr/ctxtS_MATNR-LOW").Text = "566666"
        session.FindById("wnd[0]/usr/ctxtS_MATNR-HIGH").Text = "5666666"
        session.FindById("wnd[0]/usr/ctxtS_WERKS-LOW").Text = "1111"
        session.FindById("wnd[0]/usr/ctxtS_WERKS-HIGH").Text = "1045"
        session.FindById("wnd[0]/usr/ctxtS_WERKS-HIGH").SetFocus
        session.FindById("wnd[0]/usr/ctxtS_WERKS-HIGH").caretPosition = 4
        session.FindById("wnd[0]/tbar[1]/btn[8]").press
        session.FindById("wnd[0]/usr/cntlYCONTAINER/shellcont/shell").pressToolbarContextButton "&MB_EXPORT"
        session.FindById("wnd[0]/usr/cntlYCONTAINER/shellcont/shell").selectContextMenuItem "&XXL"
        session.FindById("wnd[1]/tbar[0]/btn[0]").press
        session.FindById("wnd[1]/usr/ctxtDY_PATH").Text = "C:\Documents\SAP_GUI_Code"
        session.FindById("wnd[1]/usr/ctxtDY_FILENAME").Text = "Stock.XLSX"
        session.FindById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 11
        session.FindById("wnd[1]/tbar[0]/btn[11]").press
        session.FindById("wnd[0]/tbar[0]/btn[3]").press
        session.FindById("wnd[0]/tbar[0]/btn[3]").press

        exit Sub

1 Ответ

0 голосов
/ 28 января 2020

Вы говорите, что appl Ничего не содержит. Так что это нормально, что session также не содержит ничего, следовательно, ошибка 91 при использовании переменной.

Как сказал @GSerg в беседе:

Это было бы потому, что IsObject определяет если переменная имеет тип объекта, а не содержит ли он экземпляр объекта. В частности, IsObject (Nothing) имеет значение True. Вы хотите заменить все ваши вызовы IsObject тестами Is Nothing.

Следовательно, первые строки должны быть:

        If appl Is Nothing Then
           Set SapGuiAuto = GetObject("SAPGUI")
           Set appl = SapGuiAuto.GetScriptingEngine
        End If
        If Connection Is Nothing Then
           Set Connection = appl.Children(0)
        End If
        If session Is Nothing Then
           Set session = Connection.Children(0)
        End If
...