Код не "ждет", пока книга не откроется, чтобы продолжить

У меня есть код VBA, который смешивает SAPScript и VBA. По сути, я использую транзакцию SAP и экспортирую ее в виде таблицы Excel, после того как я нажимаю кнопку экспорта, она запрашивает место для сохранения.

Я записал скрипт с использованием SAP и вставил его в VBA

Шаги:

  1. Нажмите кнопку для экспорта (SAP)

(очевидно, нет кода, который включает в себя окно "Сохранить как...", пользователь должен взаимодействовать)

  1. Нажмите кнопку, чтобы вернуться на главную страницу (SAP)

  2. Установите для Open Workbook имя, чтобы я мог с ним работать

Проблема в том, что если я запускаю код, он не работает. Как будто код не ждет, пока книга откроется, чтобы идти дальше.

Я пытался:

  1. Добавление времени для кода VBA для ожидания
  2. Добавление строк (например, MsgBox) между событиями
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select '(Step 1)
session.findById("wnd[0]/tbar[0]/btn[3]").press '(Step 2)
session.findById("wnd[0]/tbar[0]/btn[3]").press '(Step 2)

Set Book = ActiveWorkbook '(Step 3)
Set Sheet = ZMMBBook.Worksheets("Sheet1") '(Step 3)

Ожидается, что рабочая книга установлена, но вместо этого код запускается до ее открытия. Даже попытка добавить время между ними не работает, это похоже на то, что он открывается только после того, как он прогрессирует, но когда он прогрессирует, рабочая книга не открывается, поэтому это приводит к ошибке "Subscript Out of Range".

Если я вставлю точку останова в строку "Установить", откроется рабочая книга, и если я продолжу, код будет работать нормально.

Я хотел бы в качестве решения:

  1. Способ вставки строк кода, которые делают код "ломающимся", как будто в точке останова (но плавно, так что конечный пользователь может использовать его)

  2. Способ в SAPScript взаимодействовать с окном сохранения (потому что я бы сказал, что, похоже, именно это и вызывает ошибку)

  3. Любое другое решение

Спасибо вам всем!

1 ответ

Попробуйте проверить успешную загрузку файла после нажатия последней кнопки SAP GUI, прежде чем продолжить работу с VBA. Что-то вроде этого...

session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select '(Step 1)
session.findById("wnd[0]/tbar[0]/btn[3]").press '(Step 2)
session.findById("wnd[0]/tbar[0]/btn[3]").press '(Step 2)

' Check the file downloaded successfully
If session.findById("wnd[0]/sbar").Text <> "" Then
    msgbox "There was an error downloading the file"
end if

Set Book = ActiveWorkbook '(Step 3)
Set Sheet = ZMMBBook.Worksheets("Sheet1") '(Step 3)

Сценарии GUI хороши для того, чтобы дождаться завершения обработки чего-либо перед тем, как перейти к следующей команде, но у меня были проблемы при переходе назад и вперед между SAP GUI Scripting и VBA.

Или вам нужно экспортировать файл, чтобы получить данные? Моим первым предпочтением было извлечение данных прямо из графического интерфейса пользователя из таблицы, таблицы или ряда отдельных полей, где я мог, в массив, который я затем вставил бы в диапазон Excel. Это означает еще несколько сценариев с графическим интерфейсом, но часто выполняется быстрее и дает нам больше контроля над тем, какие именно данные мы получили и куда они были отправлены (поля описания часто экспортируются с тем же заголовком, но их легко идентифицировать в графическом интерфейсе SAP).

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