Код не «ждет», пока книга не откроется, чтобы продолжить - PullRequest
0 голосов
/ 14 февраля 2019

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

Я записал сценарий с помощью SAP и вставил его в VBA

Шаги:

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

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

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

Задать имя открытой рабочей книге, чтобы я мог работать с ней

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

Я попытался:

  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. A WayВставить строки кода, которые делают код «ломающимся», как если бы он находился в точке останова (но плавно, чтобы конечный пользователь мог ее использовать)

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

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

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

1 Ответ

0 голосов
/ 15 февраля 2019

Попробуйте проверить успешную загрузку файла после нажатия последней кнопки 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.Это означает еще несколько сценариев GUI, но часто выполняется быстрее и дает нам больше контроля над тем, какие именно данные мы получили и куда они были отправлены (поля описания часто экспортируются с тем же заголовком, но могут быть легко идентифицированы в графическом интерфейсе SAP).

...