VBA操作SAP GUI:如何获取选中物料分类的行坐标
动态获取SAP物料特性坐标并赋值的解决方案
核心思路
放弃依赖固定坐标MWERT[x,y],改为通过特性的名称/内部代码定位目标行,这种方式不受物料特性数量、排序变化的影响,稳定性更强。
实现步骤(VBA示例)
- 获取特性表格的控件对象
Dim objTable As GuiTableControl Set objTable = session.findById("wnd[0]/usr/subSUBSCR_BEWERT:SAPLCTMS:5000/tabsTABSTRIP_CHAR/tabpTAB1/ssubTABSTRIP_CHAR_GR:SAPLCTMS:5100/tblSAPLCTMSCHARS_S")
- 遍历表格行,匹配目标特性
根据实际需求选择以下两种匹配方式之一:
- 按特性描述匹配(比如屏幕显示的"运输条件"):
Dim iRow As Integer For iRow = 0 To objTable.RowCount - 1 ' 检查当前行的特性描述(字段名需根据实际屏幕确认,示例为RCTMS-MAKTX) If objTable.GetCell(iRow, "RCTMS-MAKTX").Text = "运输条件" Then ' 给对应行的特性值字段赋值 objTable.GetCell(iRow, "RCTMS-MWERT").Text = col3 Exit For ' 找到目标后退出循环 End If Next iRow
- 按特性内部代码匹配(更可靠,比如你的运输条件特性代码是
ZTRANS_COND):
Dim iRow As Integer For iRow = 0 To objTable.RowCount - 1 ' 检查当前行的特性内部代码(字段名需根据实际屏幕确认,示例为RCTMS-ATNAM) If objTable.GetCell(iRow, "RCTMS-ATNAM").Text = "ZTRANS_COND" Then objTable.GetCell(iRow, "RCTMS-MWERT").Text = col3 Exit For End If Next iRow
关键说明
- 确认字段名:可以用SAP GUI Scripting Tracker工具查看表格中各列的技术字段名,确保
RCTMS-MAKTX/RCTMS-ATNAM/RCTMS-MWERT与你的操作屏幕一致。 - 为何不用坐标:物料的特性数量、排序会因物料类型、配置不同发生变化,固定坐标会导致脚本频繁失效,而通过特性标识定位是通用适配方案。
- 你之前尝试的
GuiFocus.ID和getFocusedNodeKey()无效,是因为表格控件的聚焦信息无法直接映射到行坐标,且依赖手动聚焦,不适合自动化脚本场景。
内容的提问来源于stack exchange,提问作者Łukasz Lukas
相关产品推荐
相关产品推荐

