用EXCEL调用SAP脚本批量维护物料主数据

2025-10-18 15:56:00

1、在SAP系统中启用脚本的录制

登录SAP系统—选项—辅助功能与脚本—用户设置—启用脚本(三个复选框不需要钩选)

用EXCEL调用SAP脚本批量维护物料主数据

用EXCEL调用SAP脚本批量维护物料主数据

2、开始录制

点击“开始录制”按钮,开始记录SAP的操作。录制状态下的SAP操作,使用正常操作即可,但是应尽量减少不必要的动作,可选择用键盘操作。

用EXCEL调用SAP脚本批量维护物料主数据

用EXCEL调用SAP脚本批量维护物料主数据

用EXCEL调用SAP脚本批量维护物料主数据

用EXCEL调用SAP脚本批量维护物料主数据

3、操作SAP系统

1、以修改物料主数据的“基本数据1视图”中的“基本计量单位”为例(其他操作方法可参考进行,原理都是一样的,前提是获得必要的SAP操作权限);

2、事务代码:MM02,为方便录制文件在EXCEL中循环使用时,每次都重新打开窗口,此时使用事务代码“/nMM02”

用EXCEL调用SAP脚本批量维护物料主数据

用EXCEL调用SAP脚本批量维护物料主数据

用EXCEL调用SAP脚本批量维护物料主数据

用EXCEL调用SAP脚本批量维护物料主数据

4、录制结束,停止录制;

找到存放脚本的文件夹,如果未修改,脚本默认名称为Script1.vbs

用EXCEL调用SAP脚本批量维护物料主数据

1、查看录制的脚本

1、可以使用记事本格式打开录制脚本;

2、如果有安装vb6或更高版本的vb程序,也可以用其打开;

3、此处用记事本格式打开

用EXCEL调用SAP脚本批量维护物料主数据

用EXCEL调用SAP脚本批量维护物料主数据

2、脚本分析

脚本的前半部分,主要是判断是否有登录、连接到SAP客户端、获取脚本引擎,

可以不用管;

获取脚本引擎的方法,如下:

Set SapGuiAuto  = GetObject("SAPGUI")

Set application = SapGuiAuto.GetScriptingEngine

在VBA编辑器中,第二行可修改为(在VBA中application的属性的使用无效)

Set AppSAP = SapGuiAuto.GetScriptingEngine

用EXCEL调用SAP脚本批量维护物料主数据

用EXCEL调用SAP脚本批量维护物料主数据

3、脚本分析,同理,在VBA编辑器中:

Application.Children(0),可改成,AppSAP.Children(0)

   Set Connection = Application.Children(0)

改成

   Set Connection = AppSAP.Children(0)

其他地方的对象做同样的设置

1、在EXCEL中整理需要维护的物料编码、单位,做成列表,如图

用EXCEL调用SAP脚本批量维护物料主数据

2、将脚本复制到EXCEL的vba编辑器,整理;

添加FOR循环,达到批量修改的目的。

3、执行代码

Sub SAP脚本()

    Dim i%

    Set SapGuiAuto = GetObject("SAPGUI")

    Set AppSAP = SapGuiAuto.GetScriptingEngine

    Set Connection = AppSAP.Children(0)

    Set session = Connection.Children(0)

    For i = 2 To 18

        With session

            .findById("wnd[0]").maximize

            .findById("wnd[0]/tbar[0]/okcd").Text = "/nMM02"

            .findById("wnd[0]").sendVKey 0

            .findById("wnd[0]/usr/ctxtRMMG1-MATNR").Text = Cells(i, 1)

            .findById("wnd[0]").sendVKey 0

            .findById("wnd[1]/usr/tblSAPLMGMMTC_VIEW").getAbsoluteRow(0).Selected = True

            .findById("wnd[1]").sendVKey 0

            .findById("wnd[0]/usr/tabsTABSPR1/tabpSP01/ssubTABFRA1:SAPLMGMM:2004/subSUB2:SAPLMGD1:2001/ctxtMARA-MEINS").Text = Cells(i, 2)

            .findById("wnd[0]/usr/tabsTABSPR1/tabpSP01/ssubTABFRA1:SAPLMGMM:2004/subSUB2:SAPLMGD1:2001/ctxtMARA-MEINS").SetFocus

            .findById("wnd[0]/usr/tabsTABSPR1/tabpSP01/ssubTABFRA1:SAPLMGMM:2004/subSUB2:SAPLMGD1:2001/ctxtMARA-MEINS").caretPosition = 2

            .findById("wnd[0]").sendVKey 0

            .findById("wnd[1]/usr/btnSPOP-OPTION1").press

        End With

    Next i

End Sub

4、上述代码比较简单直白,就不再做注释和解释说明了。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢