Как выполнить SAP GUI Macro из VBA в Excel или Visual Studio?

Я новичок в написании сценариев для SAP и сейчас изучаю C# и Visual Basic, но я хочу иметь возможность редактировать и запускать макросы SAP либо из редактора VBA в Excel, либо из приложения Windows Form.

Конкретная проблема, с которой я сталкиваюсь, заключается в том, что я не могу заставить свой код "подключиться" к текущему сеансу sap, когда скрипт используется в компиляторе. Единственный раз, когда это работает, это когда я открываю оригинальный vbscript, который создает макро рекордер.

При настройке SAP в моей системе мы автоматически подключаемся к SAP Logon и запускаем новое окно графического интерфейса sap через веб-портал saplogon.com/irj/portal. Мне не нужно физически входить в систему, прежде чем я буду взаимодействовать с GUI.

Когда я копирую макрос скрипт дословно, я получаю ошибки во время выполнения:

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
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/subSA_0100_1:SAPMZCX_CSDSLSBM5001_OFS_OTS:2410/subSA_2410_1:SAPMZCX_CSDSLSBM5001_OFS_OTS:2510/ctxtKUWEV-KUNNR").text = "I033"
session.findById("wnd[0]/usr/subSA_0100_1:SAPMZCX_CSDSLSBM5001_OFS_OTS:2410/subSA_2410_1:SAPMZCX_CSDSLSBM5001_OFS_OTS:2510/ctxtKUWEV-KUNNR").caretPosition = 4
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[1]/usr/lbl[12,3]").setFocus
session.findById("wnd[1]/usr/lbl[12,3]").caretPosition = 16
session.findById("wnd[1]").sendVKey 2
session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").setCurrentCell 1,"MAKTX2"
session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").doubleClickCurrentCell
session.findById("wnd[1]/tbar[0]/btn[0]").press`

Я пытался сделать это, добавив ссылку sapfewselib в проект, а затем объявив объект SAP GUI.

Я не могу понять это, хотя и все примеры, которые я могу найти, о том, как войти в новый сеанс SAP. Я не могу понять, почему код будет выполняться при сохранении блокнота в виде файла VBScript, но не при присоединении к кнопке в приложении Windows Form или электронной таблице Excel, даже если я добавил ссылку.

Может кто-нибудь, пожалуйста, помогите мне, я гуглил в течение 2 недель.

1 ответ

Решение

Поэтому я до сих пор не могу найти пример в C#, который не включает в себя вход в систему, но для редактора VBA в Excel следующие работы работают, но обратите внимание, что в Visual Studio ключевые слова set и let удалены. На тот случай, если у кого-то еще есть такая же проблема, это то, что вам нужно назначить кнопке:

    Sub Button1_Click()

    Dim SapGuiAuto
    Dim SetApp
    Dim Connection
    Dim Session

    Set SapGuiAuto = GetObject("SAPGUI")
    Set SetApp = SapGuiAuto.GetScriptingEngine
    Set Connection = SetApp.Children(0)
    Set Session = Connection.Children(0)

    Session.findById("wnd[0]").maximize

//Then your script to control gui below this://
    Session.findById("wnd[0]/usr/subSA_0100_1:SAPMZCX_CSDSLSBM5001_OFS_OTS:2410/subSA_2410_1:SAPMZCX_CSDSLSBM5001_OFS_OTS:2510/ctxtKUWEV-KUNNR").Text = "I033"
    Session.findById("wnd[0]/usr/subSA_0100_1:SAPMZCX_CSDSLSBM5001_OFS_OTS:2410/subSA_2410_1:SAPMZCX_CSDSLSBM5001_OFS_OTS:2510/ctxtKUWEV-KUNNR").caretPosition = 4
    Session.findById("wnd[0]").sendVKey 0
    Session.findById("wnd[1]/usr/lbl[12,3]").SetFocus
    Session.findById("wnd[1]/usr/lbl[12,3]").caretPosition = 16
    Session.findById("wnd[1]").sendVKey 2
    Session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").setCurrentCell 1, "MAKTX2"
    Session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").doubleClickCurrentCell
    Session.findById("wnd[1]/tbar[0]/btn[0]").press

    End Sub
Другие вопросы по тегам