You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确读取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:36:00