使用Do Loop VBA选择SAP字段

时间:2018-04-24 19:51:39

标签: vba excel-vba sap sap-gui excel

我正在研究一个宏来进入SAP并选择列中的单元格以提取为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)

有没有人知道如何使这项工作?

2 个答案:

答案 0 :(得分:2)

是的,我实现了相同类型的脚本。你需要构造你的字符串,同时将i转换为字符串:

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

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

我只改变了一行,但你应该能够正确地做到这一点,因为你已经确定了你的问题,所以你要掌握一切是如何运作的。祝你好运,

答案 1 :(得分:0)

您是否尝试过通过名称而不是数字来引用列?

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

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