Я пишу код в Excel VBA для автоматической загрузки данных из отчета SAP FS10N. Единственная проблема, которая у меня есть сейчас, заключается в том, что я не могу найти никакого решения, чтобы выбрать макет, который я не хочу использовать по имени макета. Это строка кода, которую я нашел решением, но она не работает для меня:
Session.findById("wnd[1]/usr/ssubD0500_SUBSCREEN:SAPLSLVC_DIALOG:0501/cntlG51_CONTAINER/shellcont/shell")
Есть идеи, как двигаться дальше?
Редактировать: Это часть моего код, где я не могу получить доступ к всплывающему окну, которое показывает доступные макеты. И поэтому я не могу выбрать макет по имени, только способ, которым рекордер скриптов сохранил способ, которым я это сделал вручную:
session.findById("wnd[0]/tbar[1]/btn[33]").press
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]/usr/lbl[1,12]").setFocus
session.findById("wnd[1]/usr/lbl[1,12]").caretPosition = 3
session.findById("wnd[1]").sendVKey 2
Повторяющиеся строки 2-5 показывают, где я прокручивал список .
Edit2: Вот как выглядит мой сценарий при записи:
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "fs10n"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtSO_SAKNR-LOW").text = "884050"
session.findById("wnd[0]/usr/txtGP_GJAHR").text = "2020"
session.findById("wnd[0]/usr/txtGP_GJAHR").setFocus
session.findById("wnd[0]/usr/txtGP_GJAHR").caretPosition = 4
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/usr/cntlFDBL_BALANCE_CONTAINER/shellcont/shell").setCurrentCell 1,"BALANCE"
session.findById("wnd[0]/usr/cntlFDBL_BALANCE_CONTAINER/shellcont/shell").selectedRows = "1"
session.findById("wnd[0]/usr/cntlFDBL_BALANCE_CONTAINER/shellcont/shell").doubleClickCurrentCell
session.findById("wnd[0]/tbar[1]/btn[33]").press
'My problem starts here
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]").sendVKey 81
session.findById("wnd[1]/usr/lbl[1,12]").setFocus
session.findById("wnd[1]/usr/lbl[1,12]").caretPosition = 2
session.findById("wnd[1]").sendVKey 2
Я не хочу каким-либо образом заменить последние семь строк. Я не хочу каким-то образом выбирать макет по имени в диалоговом окне. Надеюсь, теперь это станет более понятным.
Edit3: строка над моим комментарием: session.findById ("wnd [0] / tbar 1 / btn [33]"). Нажмите Opens диалоговое окно выбора макета:
После нажатия кнопки открывается это диалоговое окно:
Последние 7 строк кода - это мои ручные шаги, прокручиваемые вверх 4 раза, и выбрав нужный макет. Рекордер не помогает мне определить диалоговое окно.
Я не могу более подробно рассказать о своей проблеме, надеюсь, этого будет достаточно, чтобы кто-то мне помог.
* отдельная благодарность Сандре !