Как читать все данные из окна SAP GUI с помощью VBA

Я пытаюсь автоматизировать T-Code-VA03. Я ввожу номер заказа в текстовом поле номера заказа и нажимаю F8,

Экран 1

Это вызывает окно, которое содержит несколько строк меток.

Экран 2

Мое требование, я хочу выбрать тот, с последней датой. Я попытался записать скрипт для него и ниже кода.

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

Я вижу, есть ярлыки с индексами. Как я могу перебрать все окно и перенести фокус на последнюю дату?

2 ответа

Решение

С помощью скрипта 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 

С уважением, ScriptMan

Если вам действительно нужно сделать что-то вроде перебора окна и перевести фокус на строку с самой последней датой, не делайте этого с VBA, потому что вы можете столкнуться с множеством проблем.

Сказав выше, попробуйте с sendkeys https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-sendkeys-method-excel и отправить вкладку. Затем создайте код для поиска "Предмет" в вашей форме. После этого отправьте вкладку 8 раз, чтобы перейти к PO Date, Напишите дату в списке. Отправьте TAB снова 11 раз к следующей дате. Запишите это в список. И так до тех пор, пока не останется больше дат.

Во всяком случае, как я уже говорил, это не очень хорошее решение. Лучший способ - просто спросить администратора БД о доступе только для чтения к БД или индивидуальном представлении. С его помощью вы можете сделать надежное решение, которое читает самую последнюю дату.

Другие вопросы по тегам