SAP GUI 自动化
SAP GUI 自动化的 VBScript,自动执行手动和重复性流程,专注于更高价值的工作。
·
-
开启脚本和录制回放功能
a.输入事务RZ11,回车进入对应事务
b.参数名称输入:sapgui/user_scripting,点击显示进入设置页面
c.点击更改值,新值输入:True,点击保存
-
录制脚本
a.点击设置按钮,确认脚本录制和回放(P)...
b.点击后出现以下录制按钮
c.点击红色录制案件,录制操作,录制完成后,点击红色方框按钮。
d.点击更多,查看脚本文件
举例:将输入RZ11,回车,输入sapgui/user_scripting,点击显示的操作录制后的vbs脚本。
e.打开Excel,开发工具,插入按钮
f.点击新建
g.将刚才的vbs内容复制到Excel中
If Not IsObject(Application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set Application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = Application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject Application, "on"
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "RZ11"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtTPFYPROPTY-PARANAME").text = "sapgui/user_scripting"
session.findById("wnd[0]/usr/ctxtTPFYPROPTY-PARANAME").caretPosition = 21
session.findById("wnd[0]/usr/btnPANZEIGEN_1000").press
h.将变量Application重命名为sapApplication,如果不重命名,执行时会出现以下错误。
重命名后可以行代码
Sub 按钮1_Click()
If Not IsObject(SapApplication) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set SapApplication = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = SapApplication.Children(0)
End If
If Not IsObject(session) Then
Set session = Connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject SapApplication, "on"
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "RZ11"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtTPFYPROPTY-PARANAME").Text = "sapgui/user_scripting"
session.findById("wnd[0]/usr/ctxtTPFYPROPTY-PARANAME").caretPosition = 21
session.findById("wnd[0]/usr/btnPANZEIGEN_1000").press
End Sub
i.回到Excel,点击执行按钮,弹出Sap的确认按钮,点击确定即可执行刚才的脚本。
-
实现自动填写Remark脚本
执行以下代码,进入ME21N的T-Code画面
'TCode
session.findById("wnd[0]/tbar[0]/okcd").Text = "ME21N"
session.findById("wnd[0]").sendVKey 0
点击订单菜单按钮
' 其他采购订单
session.findById("wnd[0]/tbar[1]/btn[17]").press
打开选择凭证画面,输入采购订单,点击其他凭证
' 采购订单
session.findById("wnd[1]/usr/subSUB0:SAPLMEGUI:0003/ctxtMEPO_SELECT-EBELN").Text = "4500015239"
session.findById("wnd[1]").sendVKey 0
点击文本
' 选择文本
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14").Select
选择第一个“项目文本”F01
' 选择项目文本
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/cntlTEXT_TYPES_0200/shell").selectedNode = "F01"
获取文本的字符串内容
' 获取字符串
srcTxt = session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/subEDITOR:SAPLMMTE:0201/cntlTEXT_EDITOR_0201/shellcont/shell").Text
选择"Remark1"F08,将项目文本的内容黏贴到Remark1处
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/cntlTEXT_TYPES_0200/shell").selectedNode = "F12"
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/cntlTEXT_TYPES_0200/shell").topNode = "F08"
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/subEDITOR:SAPLMMTE:0201/cntlTEXT_EDITOR_0201/shellcont/shell").Text = remarkStr + vbCr + ""
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT14/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1329/subTEXTS:SAPLMMTE:0200/subEDITOR:SAPLMMTE:0201/cntlTEXT_EDITOR_0201/shellcont/shell").setSelectionIndexes 3, 3
获取下拉框的值
nextValue = session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0010/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB1:SAPLMEGUI:6000/cmbDYN_6000-LIST").Value
4.问题排错
执行过程中,出现错误窗口的。
//查找预想窗口的ID
If Not session.findById(真实的ID, False) Is Nothing Then
// 如果存在
Else
// 如果不存在
End if
例如,执行PR采购申请时,提出物料不存在的错误,中止操作,否则获取单号
错误的时候,获取错误窗口
成功的时候,获取左小角的文本编号
实际运行的代码
//查找预想窗口的ID
If Not session.findById("wnd[1]/usr/lbl[7,4]", False) Is Nothing Then
// 中止操作
Exit Sub
Else
// 把单号回填到Excel
Range(“A1”).Value = GetNum(session.findById("wnd[0]/sbar").Text)
End if
更多推荐




所有评论(0)