2017-07-19 535 views
0

我正在尝试创建一个执行SAP GUI脚本的Excel宏。我已经创建了SAP脚本,但我不明白如何在VBA宏中使用它。如何从Excel宏运行SAP GUI脚本

这是我的SAP 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]/tbar[0]/okcd").text = "ZL" 
session.findById("wnd[0]").sendVKey 0 
session.findById("wnd[0]/usr/chkP_DBAGG").selected = true 
session.findById("wnd[0]/usr/ctxtP_DTA").text = "DB" 
session.findById("wnd[0]/usr/chkP_DBAGG").setFocus 
session.findById("wnd[0]/tbar[1]/btn[8]").press 
session.findById("wnd[0]/tbar[1]/btn[25]").press 
session.findById("wnd[0]/tbar[1]/btn[26]").press 
session.findById("wnd[0]/usr/chkS005").selected = true 
session.findById("wnd[0]/usr/chkS017").selected = true 
session.findById("wnd[0]/usr/chkS018").selected = true 
session.findById("wnd[0]/usr/chkS020").selected = true 
session.findById("wnd[0]/usr/chkS025").selected = true 
session.findById("wnd[0]/usr/chkS030").selected = true 
session.findById("wnd[0]/usr/chkS031").selected = true 
session.findById("wnd[0]/usr/chkS055").selected = true 
session.findById("wnd[0]/usr/chkS057").selected = true 
session.findById("wnd[0]/usr/chkS057").setFocus 
session.findById("wnd[0]/tbar[1]/btn[8]").press 
session.findById("wnd[0]/usr/ctxtC025-LOW").setFocus 
session.findById("wnd[0]/usr/ctxtC025-LOW").caretPosition = 0 
session.findById("wnd[0]").sendVKey 4 
session.findById("wnd[1]/usr/cntlCONTAINER/shellcont/shell").selectionInterval = "20170717,20170717" 
session.findById("wnd[0]/usr/ctxtC025-HIGH").setFocus 
session.findById("wnd[0]/usr/ctxtC025-HIGH").caretPosition = 0 
session.findById("wnd[0]").sendVKey 4 
session.findById("wnd[1]/usr/cntlCONTAINER/shellcont/shell").focusDate = "20170724" 
session.findById("wnd[1]/usr/cntlCONTAINER/shellcont/shell").selectionInterval = "20170724,20170724" 
session.findById("wnd[0]/usr/txtL_MX").text = "9999999" 
session.findById("wnd[0]/usr/txtL_MX").setFocus 
session.findById("wnd[0]/usr/txtL_MX").caretPosition = 11 
session.findById("wnd[0]/tbar[1]/btn[8]").press 
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").select 
session.findById("wnd[1]/usr/ctxtDY_PATH").setFocus 
session.findById("wnd[1]/usr/ctxtDY_PATH").caretPosition = 0 
session.findById("wnd[1]").sendVKey 4 
session.findById("wnd[2]/usr/ctxtDY_PATH").setFocus 
session.findById("wnd[2]/usr/ctxtDY_PATH").caretPosition = 0 
session.findById("wnd[2]").sendVKey 4 
session.findById("wnd[3]/usr/ctxtDY_PATH").setFocus 
session.findById("wnd[3]/usr/ctxtDY_PATH").caretPosition = 0 
session.findById("wnd[3]").sendVKey 4 
session.findById("wnd[4]/usr/ctxtDY_PATH").text = "G:\PROFILES\AP\Desktop" 
session.findById("wnd[4]/usr/ctxtDY_FILENAME").text = "report.xlsx" 
session.findById("wnd[4]/usr/ctxtDY_FILENAME").caretPosition = 11 
session.findById("wnd[4]/tbar[0]/btn[11]").press 
session.findById("wnd[3]/tbar[0]/btn[11]").press 
session.findById("wnd[2]/tbar[0]/btn[0]").press 
session.findById("wnd[1]/tbar[0]/btn[11]").press 

我对此并不怀疑:

  1. 我如何在Excel宏添加此。
  2. 运行之前需要手动打开SAP吗?
  3. 我是否需要使用任何附加代码从Excel宏中打开SAP?

我只需要点击按钮来执行该过程。我没有动态传递任何值。

回答

0

不幸的是,由于更换作业,我不再访问任何SAP应用程序,所以下面是我记得的。

  • 您可以通过复制并粘贴到Sub将其添加到Excel宏。

  • 您将需要手动打开SAP以及保持计算机解锁,否则您的宏将崩溃。有可能通过宏打开SAP,我在上一份工作中完成了它,并使用硬编码密码登录到该文件,但我没有要共享的代码。

  • 在粘贴的脚本,用别的东西代替的application每个实例,如guiApplication,否则Excel将感到困惑与自己Excel.Application成员。

  • 不需要其他代码,但需要调用Sub例程并确保您没有设置option explicit。你可以,但是,那么你将需要实例sessionconnection

如果把脚本:

Public Sub MySapScript() 
    ' Your Sap Script here 
End Sub