用EXCEL调用SAP脚本批量维护物料主数据
1、在SAP系统中启用脚本的录制
登录SAP系统—选项—辅助功能与脚本—用户设置—启用脚本(三个复选框不需要钩选)


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




3、操作SAP系统
1、以修改物料主数据的“基本数据1视图”中的“基本计量单位”为例(其他操作方法可参考进行,原理都是一样的,前提是获得必要的SAP操作权限);
2、事务代码:MM02,为方便录制文件在EXCEL中循环使用时,每次都重新打开窗口,此时使用事务代码“/nMM02”




4、录制结束,停止录制;
找到存放脚本的文件夹,如果未修改,脚本默认名称为Script1.vbs

1、查看录制的脚本
1、可以使用记事本格式打开录制脚本;
2、如果有安装vb6或更高版本的vb程序,也可以用其打开;
3、此处用记事本格式打开


2、脚本分析
脚本的前半部分,主要是判断是否有登录、连接到SAP客户端、获取脚本引擎,
可以不用管;
获取脚本引擎的方法,如下:
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
在VBA编辑器中,第二行可修改为(在VBA中application的属性的使用无效)
Set AppSAP = SapGuiAuto.GetScriptingEngine


3、脚本分析,同理,在VBA编辑器中:
Application.Children(0),可改成,AppSAP.Children(0)
Set Connection = Application.Children(0)
改成
Set Connection = AppSAP.Children(0)
其他地方的对象做同样的设置
1、在EXCEL中整理需要维护的物料编码、单位,做成列表,如图

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、上述代码比较简单直白,就不再做注释和解释说明了。