VBA从SAP中提取数据以获取虚拟对象

时间:2013-10-18 14:42:13

标签: excel vba excel-vba sap netweaver

有谁知道如何使用VBA从SAP Netweaver提取数据?

我有许多日常报告需要将数据从SAP导出到Excel并将其格式化为报告。我已经编写了可以进行格式化的工作VBA宏。我必须手动提取数据并单独运行每个报表宏。如果我的宏可以进入SAP,获取报告#1的数据,格式化它,获取报告#2的数据等,那么可以节省很多时间。

我使用SAP NetWeaver(版本730,版本7300.1.3.1079)。报告只是Excel数据透视表和图表。

谢谢!

1 个答案:

答案 0 :(得分:28)

这完全取决于您对SAP系统的访问权限。导出数据的ABAP程序和/或宏可以调用的RFC直接获取数据或让SAP创建文件可能是最好的。

然而作为一般规则,寻找此类答案的人们正在寻找一种直接的解决方案,不需要他们的IT部门花费数月时间来定制他们的SAP系统。

在这种情况下,您可能希望使用SAP GUI Scripting。 SAP GUI脚本允许您以与自动化Excel相同的方式自动化Windows SAP GUI。实际上,您可以直接从Excel宏调用SAP GUI。阅读更多信息here。 SAP GUI有一个像Excel一样的宏录制工具。它在VBScript中记录宏,与Excel VBA几乎相同,通常可以直接复制并粘贴到Excel宏中。

示例代码

这是一个基于我有权访问的SAP系统的简单示例。

Public Sub SimpleSAPExport()
  Set SapGuiAuto  = GetObject("SAPGUI") 'Get the SAP GUI Scripting object
  Set SAPApp = SapGuiAuto.GetScriptingEngine 'Get the currently running SAP GUI 
  Set SAPCon = SAPApp.Children(0) 'Get the first system that is currently connected
  Set session = SAPCon.Children(0) 'Get the first session (window) on that connection

  'Start the transaction to view a table
  session.StartTransaction "SE16"

  'Select table T001
  session.findById("wnd[0]/usr/ctxtDATABROWSE-TABLENAME").Text = "T001"
  session.findById("wnd[0]/tbar[1]/btn[7]").Press

  'Set our selection criteria
  session.findById("wnd[0]/usr/txtMAX_SEL").text = "2"
  session.findById("wnd[0]/tbar[1]/btn[8]").press

  'Click the export to file button
  session.findById("wnd[0]/tbar[1]/btn[45]").press

  'Choose the export format
  session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").select
  session.findById("wnd[1]/tbar[0]/btn[0]").press

  'Choose the export filename
  session.findById("wnd[1]/usr/ctxtDY_FILENAME").text = "test.txt"
  session.findById("wnd[1]/usr/ctxtDY_PATH").text = "C:\Temp\"

  'Export the file
  session.findById("wnd[1]/tbar[0]/btn[0]").press
End Sub

脚本录制

要帮助查找wnd[1]/tbar[0]/btn[0]等元素的名称,您可以使用脚本录制。 单击自定义本地布局按钮,它可能看起来像这样: Customize Local Layout
然后找到脚本录制和播放菜单项 Script Recording and Playback
在其中More按钮允许您查看/更改VB脚本记录到的文件。输出格式有点乱,它记录选择文本,在文本字段内单击等内容。

编辑:早期和晚期绑定

如果直接复制到VBA宏中,则提供的脚本应该有效。它使用后期绑定,行Set SapGuiAuto = GetObject("SAPGUI")定义了SapGuiAuto对象。

如果您希望使用早期绑定,以便VBA编辑器可能显示您正在使用的对象的属性和方法,则需要在SAP GUI安装文件夹中添加对sapfewse.ocx的引用。