SAP GUI Script简单案例
简单介绍:
SAP GUI Script是一种基于SAP GUI的功能增强,与BDC,LSMW,LTMC一样都可以做为数据迁移的工具,SAP GUI Script操作简单,灵活度高,可用于处理日常紧急的工作,代码量少,但不利于维护,缺乏强大的逻辑处理能力,且效率较为低下。
操作步骤
1、RZ11参数文件sapgui/user_scripting值为TRUE
2、打开脚本录制
若此按钮灰色不可点击,建议推出重进SAP(前提是参数文件已修改)
3、进行屏幕录制,就和正常操作SAP一样,结束后记得点击暂停按钮
4、录制结束后会生成一个脚本
以文本文件方式打开脚本获取到里面的代码
5、新建Excel,alt+F11打开宏,新建一个模块,将脚本中的代码放入到模块中
这里最好将application全部改成别的名字
6、回到Excel界面,制作运行按钮
7、打开SAP 后,在EXCEL中点击按钮执行
8、批量插入数据
参考以下代码改吧改吧,也是可以看懂的,Sub creatte()中进行数据处理,获取excel中的数据,以参数的方式传到Function CreateMigo中
原脚本中的application已被替换为SapApp
Sub creatte()'定义工作表对象'Dim ws As Worksheet'定义测试数据变量Dim testData As Variant'定义循环变量,用于循环测试数据Dim i As Long'定义创建项目所需字段变量Dim Matnr As String, Erfmg As Integer'定义SAP脚本执行相关对象Dim SapGuiAuto As ObjectDim SapApp As ObjectDim Connection As ObjectDim Session As Object'忽略错误On Error Resume Next'获取 SAP GUI 自动化接口对象Set SapGuiAuto = GetObject("SAPGUI")If SapGuiAuto Is Nothing ThenMsgBox "SAP GUI 未运行,请先打开 SAP。", vbExclamationExit SubEnd IfOn Error GoTo 0'获取脚本引擎Set SapApp = SapGuiAuto.GetScriptingEngine'获取第一个连接Set Connection = SapApp.Children(0)'获取第一个会话Set Session = Connection.Children(0)'获取测试数据Set ws = ThisWorkbook.Sheets("Sheet1")'将测试数据放入数组中testData = ws.UsedRange.Value'循环储存测试数据的数组,第二行还是读For i = 2 To UBound(testData, 1)'把每行数据对应值赋予相关字段'物料编码(第一列)Matnr = testData(i, 1)'数量(第二列)Erfmg = testData(i, 2)'调用创建项目的脚本代码Call CreateMigo(Session, Matnr, Erfmg)Next iEnd SubFunction CreateMigo(Session As Object, Matnr As String, Erfmg As Integer)Session.findById("wnd[0]").maximize
Session.findById("wnd[0]/tbar[0]/okcd").Text = "/NMIGO"
Session.findById("wnd[0]").sendVKey 0
Session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0003/subSUB_ITEMDETAIL:SAPLMIGO:0301/subSUB_DETAIL:SAPLMIGO:0300/tabsTS_GOITEM/tabpOK_GOITEM_MATERIAL").Select
Session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0003/subSUB_ITEMDETAIL:SAPLMIGO:0301/subSUB_DETAIL:SAPLMIGO:0300/tabsTS_GOITEM/tabpOK_GOITEM_QUANTITIES").Select
Session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0003/subSUB_ITEMDETAIL:SAPLMIGO:0301/subSUB_DETAIL:SAPLMIGO:0300/tabsTS_GOITEM/tabpOK_GOITEM_DESTINAT.").Select
Session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0003/subSUB_ITEMDETAIL:SAPLMIGO:0301/subSUB_DETAIL:SAPLMIGO:0300/tabsTS_GOITEM/tabpOK_GOITEM_EXT_1").Select
Session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell[1]").topNode = " 1"
Session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0003/subSUB_ITEMDETAIL:SAPLMIGO:0301/subSUB_DETAIL:SAPLMIGO:0300/tabsTS_GOITEM/tabpOK_GOITEM_MATERIAL/ssubSUB_TS_GOITEM_MATERIAL:SAPLMIGO:0310/ctxtGOITEM-MAKTX").Text = Matnr
Session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0003/subSUB_ITEMDETAIL:SAPLMIGO:0301/subSUB_DETAIL:SAPLMIGO:0300/tabsTS_GOITEM/tabpOK_GOITEM_QUANTITIES/ssubSUB_TS_GOITEM_QUANTITIES:SAPLMIGO:0315/txtGOITEM-ERFMG").Text = "1"
Session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0003/subSUB_ITEMDETAIL:SAPLMIGO:0301/subSUB_DETAIL:SAPLMIGO:0300/tabsTS_GOITEM/tabpOK_GOITEM_DESTINAT./ssubSUB_TS_GOITEM_DESTINATION:SAPLMIGO:0325/ctxtGOITEM-NAME1").Text = "C001工厂"
Session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0003/subSUB_ITEMDETAIL:SAPLMIGO:0301/subSUB_DETAIL:SAPLMIGO:0300/tabsTS_GOITEM/tabpOK_GOITEM_DESTINAT./ssubSUB_TS_GOITEM_DESTINATION:SAPLMIGO:0325/ctxtGOITEM-LGOBE").Text = "C001"
Session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0003/subSUB_ITEMDETAIL:SAPLMIGO:0301/subSUB_DETAIL:SAPLMIGO:0300/tabsTS_GOITEM/tabpOK_GOITEM_EXT_1/ssubSUB_TS_GOITEM_EXT_1:SAPLZFG_MM021:9001/txtZSMM_068-ZZLOTID").SetFocus
Session.findById("wnd[0]/usr/ssubSUB_MAIN_CARRIER:SAPLMIGO:0003/subSUB_ITEMDETAIL:SAPLMIGO:0301/subSUB_DETAIL:SAPLMIGO:0300/tabsTS_GOITEM/tabpOK_GOITEM_EXT_1/ssubSUB_TS_GOITEM_EXT_1:SAPLZFG_MM021:9001/txtZSMM_068-ZZLOTID").caretPosition = 0
Session.findById("wnd[0]").sendVKey 0
Session.findById("wnd[0]/tbar[0]/btn[11]").press
参考:https://mp.weixin.qq.com/s/gf8iwtYgYbg2JnDNJgbHYA