如何使用VBA脚本检测最后一个父节点并从其子节点获取数据

2020-09-23 23:48发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的用户

我刚刚遇到了一个使我陷入停顿的情况。

我想从自定义SAP tcode中钻取数据。 我无法解决的问题:在子子屏幕上,有一个包含项目的日志列表。 我想从列表中选择最后一个,但是无法获取行号或单元格内容来定位所需的单元格并双击。

我的代码:

设置GRID1 = session.findById(" wnd [0]/usr/cntlGRID1/shellcont/shell")
 GRID1Rows = GRID1.RowCount-1

 对于i = 0到GRID1Rows
 PONrSAP = GRID1.getcellvalue(i," EBELN")
 GRID1.setCurrentCell i," SLGREF"
 GRID1.clickCurrentCell
 '我们现在进入项目的处理日志。
 设置GRID3 = session.findById(" wnd [0]/usr/subSUBSCREEN:SAPLSBAL_DISPLAY:0101/cntlSAPLSBAL_DISPLAY_CONTAINER/shellcont/shell/shellcont [0]/shell")

 '这是问题所在。 我只能对脚本记录中的内容进行硬编码,但是
 "如果列出了多个日志结果,则我无法找到列表中的最后一项。
 '这是列表中的第一个,如果项目仅被处理过一次,则可以:
 GRID3.selectItem" 1 1"," 101"
 '这是该项目经过多次处理的示例,所以这是我要双击的实际处理结果:
 'GRID3.selectItem" 1 4"," 101"
 "我继续第1号线,如您在屏幕截图上所见。
 GRID3.ensureVisibleHorizo​​ntalItem" 1 1"," 101"
 GRID3.doubleClickItem" 1 1"," 101"
 从这一点来看,一切都很好。

 '(这里还有更多代码)

 接下来我

如您所见,我能够在GRID1.RowCount中应用RowCount方法。 但是如果是GRID3,它会返回一条错误消息:"对象不支持此属性或方法"(我已经从代码中将其删除了。)

谢谢大家的任何暗示!

拉斯洛

row-number-fetching-case-vba-scripting-on-sap.jpg (365.8 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的用户

我刚刚遇到了一个使我陷入停顿的情况。

我想从自定义SAP tcode中钻取数据。 我无法解决的问题:在子子屏幕上,有一个包含项目的日志列表。 我想从列表中选择最后一个,但是无法获取行号或单元格内容来定位所需的单元格并双击。

我的代码:

设置GRID1 = session.findById(" wnd [0]/usr/cntlGRID1/shellcont/shell")
 GRID1Rows = GRID1.RowCount-1

 对于i = 0到GRID1Rows
 PONrSAP = GRID1.getcellvalue(i," EBELN")
 GRID1.setCurrentCell i," SLGREF"
 GRID1.clickCurrentCell
 '我们现在进入项目的处理日志。
 设置GRID3 = session.findById(" wnd [0]/usr/subSUBSCREEN:SAPLSBAL_DISPLAY:0101/cntlSAPLSBAL_DISPLAY_CONTAINER/shellcont/shell/shellcont [0]/shell")

 '这是问题所在。 我只能对脚本记录中的内容进行硬编码,但是
 "如果列出了多个日志结果,则我无法找到列表中的最后一项。
 '这是列表中的第一个,如果项目仅被处理过一次,则可以:
 GRID3.selectItem" 1 1"," 101"
 '这是该项目经过多次处理的示例,所以这是我要双击的实际处理结果:
 'GRID3.selectItem" 1 4"," 101"
 "我继续第1号线,如您在屏幕截图上所见。
 GRID3.ensureVisibleHorizo​​ntalItem" 1 1"," 101"
 GRID3.doubleClickItem" 1 1"," 101"
 从这一点来看,一切都很好。

 '(这里还有更多代码)

 接下来我

如您所见,我能够在GRID1.RowCount中应用RowCount方法。 但是如果是GRID3,它会返回一条错误消息:"对象不支持此属性或方法"(我已经从代码中将其删除了。)

谢谢大家的任何暗示!

拉斯洛

row-number-fetching-case-vba-scripting-on-sap.jpg (365.8 kB)
2条回答
木偶小白
1楼 · 2020-09-24 00:17.采纳回答

Laszlo,你好

所描述的问题使我个人感兴趣,因此,我在这里提供可以测试的建议。

对象GRID3本质上不是网格,而是树。 ;-)

。  。  。
 '我们现在进入项目的处理日志。
 设置Node_Object = session.findById(" wnd [0]/usr/subSUBSCREEN:SAPLSBAL_DISPLAY:0101/cntlSAPLSBAL_DISPLAY_CONTAINER/shellcont/shell/shellcont [0]/shell")

 设置nodeCol = Node_Object.getNodesCol

 对于i = 0到nodeCol.Count-1
   key = nodeCol.elementAt(CInt(i))'返回节点的密钥
 下一个

 Node_Object.selectItem" 1"&right(space(9)&cstr(key),10)," 101"
 Node_Object.ensureVisibleHorizo​​ntalItem" 1"&right(space(9)&cstr(key),10)," 101"
 Node_Object.doubleClickItem" 1"&right(space(9)&cstr(key),10)," 101"

 '(这里还有更多代码)

 接下来我

此致

ScriptMan

DafaDDDa
2楼-- · 2020-09-24 00:24

嗨,ScriptMan,


伟大的工作,非常感谢! 我将其调整为仅捕获最后一个节点(由于日志报告的性质,我总是只需要最后一个节点,因为其他报告是来自其他失败作业的历史日志),它完全符合我的逻辑并达到了目的。 >

该站点对理解逻辑也有很大帮助,我刚刚在您的另一条评论中找到了它。 谢谢您的分享,帮助了我很多,使我理解了很多逻辑-我将其重新发布在您的功劳上,而不是我的,我也将其作为其他在这个特殊主题上苦苦挣扎的用户的有用参考:

http://www.advancedqtp.com/old_forums/viewtopic。 php?t = 3502&p = 13168

是的,对于GRID3-绝对正确,我的错:-)已经重命名为更匹配的对象名称。

Laszlo祝你有美好的一天

一周热门 更多>