如何使用 VBA 从 SAP GUI window 读取所有数据

How to read all data from SAP GUI window with VBA

我正在尝试自动化 T-Code-VA03。 我在采购订单编号文本框中输入采购订单编号,然后按 F8

这会提示一个 window,其中包含多行标签。

我的要求是,我想要 select 最新日期的那个。我试着为它和下面的代码录制脚本。

session.findById("wnd[0]/usr/txtRV45S-BSTNK").text = "123456789"
session.findById("wnd[0]/usr/txtRV45S-BSTNK").setFocus
session.findById("wnd[0]/usr/txtRV45S-BSTNK").caretPosition = 8
session.findById("wnd[0]").sendVKey 8
session.findById("wnd[1]/usr/lbl[49,6]").setFocus
session.findById("wnd[1]/usr/lbl[49,6]").caretPosition = 0

我可以看到有带索引的标签。我如何遍历整个 window 并将焦点转移到最新日期的行?

如果你真的需要做一些事情,比如遍历 window 并将焦点放在最新日期的行上,不要用 VBA 做,因为你可能会遇到很多问题。

说了上面那个,尝试用sendkeyshttps://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-sendkeys-method-excel发送TAB。然后编写代码在您的表单中搜索 "Item" 。在此之后,发送 tab 8 次以转到 PO Date。将日期写在清单上。再次发送 TAB 11 次到下一个日期。把它写在清单上。如此,直到没有更多的日期。

无论如何,正如我提到的,这不是一个很好的解决方案。最好的方法就是简单地向数据库管理员请求对数据库或自定义视图的只读访问权限。有了它,您可以制定一个可靠的解决方案,读取最新日期。

使用 VB 脚本,您可以尝试以下操作:

. . .
session.findById("wnd[0]").sendVKey 8
for i = 6 to 99
 on error resume next
 session.findById("wnd[1]/usr/lbl[49," & cstr(i) & "]").setFocus
 if err.number <> 0 then Exit for
 on error goto 0
 session.findById("wnd[1]/usr/lbl[49," & cstr(i) & "]").caretPosition = 0
next 

此致, 脚本人