Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Excel或Visual Studio中从VBA执行SAP GUI宏?_Vba_Excel_Sap - Fatal编程技术网

如何在Excel或Visual Studio中从VBA执行SAP GUI宏?

如何在Excel或Visual Studio中从VBA执行SAP GUI宏?,vba,excel,sap,Vba,Excel,Sap,我想从Excel中的VBA编辑器或Windows窗体应用程序编辑和启动SAP宏 在编译器中使用脚本时,我无法使代码“连接”到当前SAP会话。只有当我打开宏录制器创建的原始VBScript时,它才会起作用 通过在我的系统上设置SAP的方式,我们将自动登录到SAP登录,并通过门户网站saplogon.com/irj/portal启动一个新的SAP GUI窗口,在与GUI交互之前,我无需实际登录 当我逐字复制宏脚本时,会出现运行时错误: If Not IsObject(application) The

我想从Excel中的VBA编辑器或Windows窗体应用程序编辑和启动SAP宏

在编译器中使用脚本时,我无法使代码“连接”到当前SAP会话。只有当我打开宏录制器创建的原始VBScript时,它才会起作用

通过在我的系统上设置SAP的方式,我们将自动登录到SAP登录,并通过门户网站saplogon.com/irj/portal启动一个新的SAP GUI窗口,在与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引用添加到项目中,然后声明sapgui对象


我能找到的所有示例都是关于如何登录到新SAP会话的。我不明白为什么当记事本保存为VBScript文件时,代码会执行,而当附加到Windows窗体应用程序或Excel电子表格中的按钮时,即使我添加了引用,代码也不会执行。

因此,我仍然无法在c#中找到一个示例,该示例不包括登录,但对于Excel中的VBA编辑器,以下工作:,但请注意,VisualStudio中的“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