使用 Do 循环选择 SAP 字段 VBA

Selecting SAP Fields using a Do Loop VBA

我正在开发一个宏以进入 SAP 并将列中的 select 个单元格提取到 excel。现在,如果这是 excel,这就没问题了,因为我会简单地使用 do 循环沿着复制的列向下移动。我在 SAP GUI 中,它与 VBA 兼容,但有点不同。我记录了一个脚本,我点击一个列来查看代码是如何变化的。这就是我得到的。

session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/lbl[12,13]").setFocus
session.findById("wnd[0]/usr/lbl[12,13]").caretPosition = 6
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/lbl[12,14]").setFocus
session.findById("wnd[0]/usr/lbl[12,14]").caretPosition = 4
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/lbl[12,15]").setFocus
session.findById("wnd[0]/usr/lbl[12,15]").caretPosition = 5
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/lbl[12,16]").setFocus
session.findById("wnd[0]/usr/lbl[12,16]").caretPosition = 5
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/lbl[12,17]").setFocus
session.findById("wnd[0]/usr/lbl[12,17]").caretPosition = 5
session.findById("wnd[0]").sendVKey 0

随着我向下移动该列,您可以看到特定值从 13 增加到 17。我想我可以合并一个 do 循环,然后沿着列向下移动并复制值。这是我的相关代码

i = 13

Do

session.findById("wnd[0]").maximize
Current_Batch = session.findById("wnd[0]/usr/lbl[12,i]").Text
session.findById("wnd[0]/usr/lbl[12,i]").caretPosition = 6
session.findById("wnd[0]").sendVKey 0

If Current_Batch = "" Then
Exit Do
End If

Cells(i - 11, 4) = Current_Batch


i = i + 1

Loop

但这不起作用,因为它不将 i 识别为变量。它给我错误 619(找不到 ID)

有谁知道使这项工作有效的方法吗?

是的,我实现了同一种脚本。您需要构造您的字符串,同时将 i 转换为字符串:

session.findById("wnd[0]/usr/lbl[12," & CStr(i) & "]").caretPosition = 6

CStr(i) 转换为字符串,而 & 将字符串连接在一起。

我只更改了一行,但您应该能够正确地完成,因为您已经确定了您的问题,因此您了解事情是如何工作的。祝你好运,

您是否尝试过按名称而不是编号来引用列?

这是我的循环,它捕获一行中的每一列并移动到下一列

hRows = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").RowCount()
For h = 0 To hRows - 1 'Fill Dispatch Sheet at "A12"
    Cells(h + 12, 4).Value = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").getcellValue(h, "ERDAT")
    Cells(h + 12, 5).Value = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").getcellValue(h, "KTEXT")
    Cells(h + 12, 6).Value = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").getcellValue(h, "ERNAM")
    Cells(h + 12, 1).Value = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").getcellValue(h, "GEWRK")
    Cells(h + 12, 2).Value = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").getcellValue(h, "AUFNR")
    Cells(h + 12, 3).Value = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").getcellValue(h, "USTXT")
Next