如何正确读取SAP MD04中GuiTableControl控件MRP element data列总字符数
问题根因
- 循环逻辑错误:Do循环内第一圈就执行了
Exit Do语句,直接终止循环,后续j = j + 1的逻辑永远不会触发,j固定为0,你当前代码取的是Len(Cstr(j))也就是字符串"0"的长度,返回值自然为1,完全没有遍历所有行的过程。 - 统计逻辑不符合需求:你赋值给单元格的是行索引j转字符串后的长度,和要求的「每行累加16」的规则没有任何关联。
- 缺少边界判断:无限循环没有终止条件,遍历到不存在的行时SAP脚本会直接抛出异常。
界面参考

修正后代码
' 先获取MD04的表格控件对象 Dim md04Table As Object Set md04Table = session.findById("wnd[0]/usr/subINCLUDE1XX:SAPMM61R:0750/tblSAPMM61RTC_EZ") Dim validRowCount As Long validRowCount = 0 ' 遍历表格所有行 For rowIdx = 0 To md04Table.Rows.Count - 1 ' 若仅需统计采购订单行,放开以下注释填写对应判断逻辑即可 ' 示例:获取MRP元素类型列的值,判断是否为采购订单 ' Dim mrpElementType As String ' mrpElementType = session.findById("wnd[0]/usr/subINCLUDE1XX:SAPMM61R:0750/tblSAPMM61RTC_EZ/[MRP元素类型列的索引," & CStr(rowIdx) & "]").Text ' If mrpElementType = "采购订单对应标识" Then validRowCount = validRowCount + 1 ' End If Next ' 按规则计算总字符数并写入Excel objSheet.Cells(i, 2) = validRowCount * 16
代码说明
- 直接通过SAP GuiTableControl自带的
Rows.Count属性获取表格实际总行数,避免无意义的循环和边界报错 - 移除了错误的强制跳出循环逻辑,支持完整遍历所有行
- 预留了采购订单行过滤逻辑,按需启用即可,替换对应列索引和类型标识就能实现仅统计采购订单行的需求
- 按规则用有效行数乘以16得到总字符数,完全符合预期要求
- 如果MD04数据量超过单页显示范围,需要额外添加翻页逻辑遍历所有分页的行再统计,否则只会统计当前展示页的有效行数
内容的提问来源于stack exchange,提问作者Adde
相关产品推荐
相关产品推荐

