2013-10-18 276 views
6

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

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

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

谢谢!

+1

您没有指定您从中导出数据的产品(SAP是一家运送了大量产品的公司 - 您在谈论哪一个?)。您不指定基于格式的报告或报告技术。没有更多信息很难回答这个问题。 – vwegert

回答

26

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

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

在这种情况下,您可能需要使用SAP GUI脚本。 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
其中0123'按钮允许您查看/更改记录VB脚本的文件。输出格式是有点乱,它记录之类的文本选择,单击文本字段等

编辑:早期和后期绑定

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

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

+0

谢谢!我今天要做一些脚本录制的实验。对于我想要做的事情,这听起来像是最好的选择(特别是因为与我一起工作的SAP DB由客户拥有,他们的IT depatment不会为我做任何事情)。 –

+0

您提供给SAP GUI Scripting页面的链接有很多关于编写脚本的信息,但我找不到有关如何使用VBA调用SAP GUI的任何信息。我假设我不能直接复制/粘贴脚本。是否有我应该启用的特定参考库?我是否需要声明像SapGuiAuto这样的变量? –

+1

您应该可以逐字复制脚本。该脚本正在使用后期绑定。我将编辑答案,详细介绍早期和晚期绑定的情况。 – AndASM