VBA извлекает данные из SAP для чайников

Кто-нибудь знает, как использовать VBA для извлечения данных из SAP Netweaver?

У меня есть ряд ежедневных отчетов, которые требуют экспорта данных из SAP в Excel и форматирования их в отчет. Я уже написал рабочие макросы VBA, которые выполняют форматирование. Я должен вручную извлечь данные и запустить каждый макрос отчета в отдельности. Так много времени можно было бы сэкономить, если бы мой макрос мог просто перейти в SAP, получить данные для отчета № 1, отформатировать его, получить данные для отчета № 2 и т. Д.

Я работаю с SAP NetWeaver (выпуск 730, версия 7300.1.3.1079). Отчеты - это сводные таблицы и диаграммы Excel.

Спасибо!

1 ответ

Решение

Все зависит от того, какой у вас доступ к вашей системе SAP. Возможно, лучше всего использовать программу ABAP, которая экспортирует данные и / или RFC, который может вызывать ваш макрос для непосредственного получения данных или когда SAP создает файл.

Однако, как правило, люди, которые ищут такой ответ, ищут немедленное решение, которое не требует от ИТ-отдела тратить месяцы на настройку своей системы SAP.

В этом случае вы, вероятно, захотите использовать SAP GUI Scripting. Сценарии SAP GUI позволяют автоматизировать Windows SAP GUI практически так же, как вы автоматизируете Excel. Фактически вы можете вызвать графический интерфейс SAP непосредственно из макроса Excel. Подробнее об этом здесь. В графическом интерфейсе SAP есть инструмент записи макросов, аналогичный Excel. Он записывает макросы в VBScript, который почти идентичен Excel VBA и обычно может быть скопирован и вставлен непосредственно в макрос Excel.

Пример кода

Вот простой пример, основанный на системе SAP, к которой у меня есть доступ.

Public Sub SimpleSAPExport()
  Set SapGuiAuto  = GetObject("SAPGUI") 'Get the SAP GUI Scripting object
  Set SAPApp = SapGuiAuto.GetScriptingEngine 'Get the currently running SAP GUI 
  Set SAPCon = SAPApp.Children(0) 'Get the first system that is currently connected
  Set session = SAPCon.Children(0) 'Get the first session (window) on that connection

  'Start the transaction to view a table
  session.StartTransaction "SE16"

  'Select table T001
  session.findById("wnd[0]/usr/ctxtDATABROWSE-TABLENAME").Text = "T001"
  session.findById("wnd[0]/tbar[1]/btn[7]").Press

  'Set our selection criteria
  session.findById("wnd[0]/usr/txtMAX_SEL").text = "2"
  session.findById("wnd[0]/tbar[1]/btn[8]").press

  'Click the export to file button
  session.findById("wnd[0]/tbar[1]/btn[45]").press

  'Choose the export format
  session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").select
  session.findById("wnd[1]/tbar[0]/btn[0]").press

  'Choose the export filename
  session.findById("wnd[1]/usr/ctxtDY_FILENAME").text = "test.txt"
  session.findById("wnd[1]/usr/ctxtDY_PATH").text = "C:\Temp\"

  'Export the file
  session.findById("wnd[1]/tbar[0]/btn[0]").press
End Sub

Запись скрипта

Чтобы помочь найти имена элементов, таких какwnd[1]/tbar[0]/btn[0] Вы можете использовать запись сценария. Нажмите кнопку настройки локального макета, она выглядит примерно так:Настроить локальный макет
Затем найдите пункт меню "Запись и воспроизведение сценария".
Запись и прослушивание скрипты
Внутри этого More Кнопка позволяет вам увидеть / изменить файл, в который записан VB Script. Формат вывода немного грязный, он записывает такие вещи, как выделение текста, нажатие внутри текстового поля и т. Д.

Изменить: Раннее и позднее связывание

Предоставленный скрипт должен работать, если он скопирован непосредственно в макрос VBA. Он использует позднюю привязку, строку Set SapGuiAuto = GetObject("SAPGUI") определяет объект SapGuiAuto.

Однако, если вы хотите использовать раннее связывание, чтобы в вашем редакторе VBA могли отображаться свойства и методы используемых вами объектов, вам необходимо добавить ссылку на sapfewse.ocx в папке установки SAP GUI.

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