Excel VBA 从 SAP NetWeaver 中提取数据

Excel VBA pulling data from SAP NetWeaver

如何使用 VBA 宏将数据从 SAP NetWeaver 提取到 Excel?

我在 SAP 系统中有数据可以通过 SAP GUI 在几个不同的事务中访问。我需要每天提取这些数据,然后将其格式化为 Excel 电子表格和报告。手动提取此数据非常耗时且容易出错。

我没有开发人员或系统支持。作为非特权用户,我必须能够自己完成。

这是从我的回答中复制过来的:

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

但是作为一般规则,寻找此类答案的人正在寻找不需要其 IT 部门花费数月时间定制其 SAP 系统的即时解决方案。

在这种情况下,您可能希望使用 SAP GUI 脚本。 SAP GUI 脚本允许您以与自动化 Excel 大致相同的方式自动化 Windows SAP GUI。事实上,您可以直接从 Excel 宏调用 SAP GUI。阅读更多内容 here。 SAP GUI 有一个类似于 Excel 的宏记录工具。它在VB脚本中记录宏,与ExcelVBA几乎相同,通常可以直接复制并粘贴到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]等元素的名称,您可以使用脚本录制。 单击自定义本地布局按钮,它可能看起来有点像这样:
然后找到脚本录制和回放菜单项。

其中 More 按钮允许您 see/change 记录 VB 脚本的文件。输出格式有点乱,它记录了选择文本、在文本字段内单击等内容

编辑:早期和晚期绑定

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

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