SAP GUI Scripting需求:查找组件ID并修改数量及脚本优化指导
SAP GUI脚本修改:遍历表格查找目标组件并修改数值
在SAP GUI事务中存在多行多列的表格,需要实现遍历第1列所有行查找目标组件ID,并修改对应行第3列数值的功能。由于不同物料的表格行数不固定,录制生成的静态脚本无法满足需求,以下是针对提供的脚本的修改方案:
现有录制脚本
session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[4,0]").text = "2.400" session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[4,0]").setFocus session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT/txtRC29P-MENGE[4,0]").caretPosition = 3 session.findById("wnd[0]").sendVKey 0 session.findById("wnd[0]/tbar[0]/btn[11]").press
修改后的动态遍历脚本
Dim objTable As Object Dim targetComponentID As String Dim newQuantity As String Dim rowCount As Integer Dim i As Integer ' 定义目标组件ID和要修改的数值 targetComponentID = "你的目标组件ID" ' 替换为实际要查找的组件ID newQuantity = "2.400" ' 替换为实际要设置的数值 ' 获取表格对象,简化后续调用 Set objTable = session.findById("wnd[0]/usr/tabsTS_ITOV/tabpTCMA/ssubSUBPAGE:SAPLCSDI:0152/tblSAPLCSDITCMAT") ' 获取表格总行数 rowCount = objTable.RowCount ' 遍历所有行 For i = 0 To rowCount - 1 ' 获取当前行第1列的组件ID(根据实际字段调整,这里假设第1列是RC29P-IDNRK) Dim currentID As String currentID = objTable.GetCell(i, "RC29P-IDNRK").Text ' 匹配目标组件ID If currentID = targetComponentID Then ' 修改当前行第3列的数值(这里对应字段是RC29P-MENGE,即数量字段) objTable.GetCell(i, "RC29P-MENGE").Text = newQuantity ' 设置焦点并确认修改 objTable.GetCell(i, "RC29P-MENGE").SetFocus objTable.GetCell(i, "RC29P-MENGE").CaretPosition = Len(newQuantity) session.findById("wnd[0]").sendVKey 0 ' 找到目标后退出循环,避免重复处理 Exit For End If Next i ' 保存修改 session.findById("wnd[0]/tbar[0]/btn[11]").press
关键说明
- 表格对象复用:先获取表格对象,避免重复编写冗长的控件路径,提升可读性和维护性
- 动态行数处理:通过
RowCount属性获取表格实际行数,实现自适应遍历 - 列字段确认:需根据实际SAP事务中的字段调整第1列(
RC29P-IDNRK)和第3列(RC29P-MENGE)的字段名,可通过SAP GUI Scripting Tracker工具查看控件的字段标识 - 修改确认:
sendVKey 0等同于按下回车键确认单元格修改,确保数值生效 - 提前退出循环:找到目标行并修改后立即退出循环,提升执行效率
内容的提问来源于stack exchange,提问作者Uzeyir Chalabi
相关产品推荐
相关产品推荐

