如何在Excel驱动的SAP PFCG批量更新脚本中实现列循环
实现方案
你当前使用的SAP GUI Scripting控件ID中,ctxtT_STORG-LOW[列索引,行索引]的第一个方括号参数就是表格的列序号,直接新增嵌套的列循环即可实现批量处理,无需重复复制代码。
代码修改步骤
- 在内层新增列循环,判断Excel当前行的对应列是否为空,为空则终止列循环
- 动态拼接控件ID,将固定的列序号替换为循环变量
- 对应读取Excel当前行、当前循环列的单元格值赋值给控件
修改后的完整代码
introw=2 ' 定义起始列:Excel第2列对应SAP表格第一组组织值,对应控件列索引为0 Const START_COL = 2 Do while objsheet.Cells(introw,1).value <> "" session.findById("wnd[0]/tbar[0]/okcd").text = "/nPFCG" session.findById("wnd[0]").sendVKey 0 session.findById("wnd[0]/usr/ctxtAGR_NAME_NEU").text = objsheet.Cells(introw,1).value session.findById("wnd[0]/usr/ctxtAGR_NAME_NEU").caretPosition = 11 session.findById("wnd[0]").sendVKey 0 session.findById("wnd[0]/usr/btn%#AUTOTEXT001").press session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB5").select session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB5/ssubSUB1:SAPLPRGN_TREE:0350/btnPROFIL1").press session.findById("wnd[0]/tbar[1]/btn[32]").press ' 新增列循环开始 Dim intcol, sapColIdx intcol = START_COL sapColIdx = 0 Do While objsheet.Cells(introw, intcol).Value <> "" ' 动态构造控件ID,列索引用循环变量sapColIdx替换 Dim ctrlId ctrlId = "wnd[1]/usr/tblSAPLSUPRNORG_TC/ctxtT_STORG-LOW[1," & CStr(sapColIdx) & "]" session.findById(ctrlId).Text = objsheet.Cells(introw, intcol).Value session.findById(ctrlId).caretPosition = 4 intcol = intcol + 1 sapColIdx = sapColIdx + 1 Loop ' 列循环结束 session.findById("wnd[1]/tbar[0]/btn[11]").press session.findById("wnd[0]/tbar[1]/btn[17]").press session.findById("wnd[0]/tbar[0]/btn[3]").press introw = introw + 1 Loop
注意事项
- 若你的SAP组织级表格列索引和Excel列的对应关系和上述默认规则不符,调整
START_COL和sapColIdx的初始值即可 - 如果组织级条目数超过表格可视范围,需要额外调用SAP表格控件的
VerticalScrollbar属性滚动加载更多条目,避免控件找不到的报错

内容的提问来源于stack exchange,提问作者querySAP
相关产品推荐
相关产品推荐

