Выбор полей SAP с помощью Do Loop VBA

Я работаю над макросом, чтобы войти в SAP и выбрать ячейки в столбце для извлечения, чтобы преуспеть. Теперь, если бы это было превосходно, это не было бы проблемой, так как я бы просто использовал цикл 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 (не удалось найти идентификатор)

Кто-нибудь знает, как сделать эту работу?

2 ответа

Решение

Да, я реализовал такой же сценарий. Вам нужно создать свою строку, одновременно преобразовав 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
Другие вопросы по тегам