Выбор полей 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