10

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

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

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

4

1 回答 1

32

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

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

在这种情况下,您可能想要使用 SAP GUI Scripting。SAP GUI 脚本允许您以与自动化 Excel 大致相同的方式自动化 Windows SAP GUI。事实上,您可以直接从 Excel 宏调用 SAP GUI。在这里阅读更多。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]您可以使用脚本记录。点击自定义本地布局按钮,大概看起来有点像这样: 自定义本地布局
然后找到 Script Recording and Playback 菜单项。
脚本录制和播放
在该More按钮中,您可以查看/更改记录 VB 脚本的文件。输出格式有点乱,它记录了选择文本、单击文本字段等内容。

编辑:早期和晚期绑定

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

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

于 2013-10-18T18:29:36.503 回答