我不熟悉使用SAP编写脚本并且正在学习C#和Visual Basic,但我希望能够从Excel中的VBA编辑器或Windows窗体应用程序编辑和启动SAP宏。
我面临的具体问题是,当在编译器中使用脚本时,我无法让我的代码“连接”到当前的sap会话。它唯一有效的时间是我打开宏录制器创建的原始vbscript。
在我的系统上设置SAP的方式我们会自动登录到SAP Logon并通过门户网站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引用添加到项目中,然后声明SAP GUI对象。
我无法理解,但我能找到的所有示例都是关于如何登录新的SAP会话。我无法理解为什么代码会在记事本保存为VBScript文件时执行,但在附加到Windows窗体应用程序或Excel电子表格中的按钮时却不会执行,即使我已添加引用。
任何人都可以帮助我,我已经谷歌搜索了2周。
答案 0 :(得分:1)
所以我仍然无法在c#中找到不包含登录的示例,但对于Excel中的VBA编辑器,以下工作方式,但在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