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 так же, как автоматизировать Excel. Фактически вы можете вызвать SAP GUI непосредственно из макроса Excel. Подробнее читайте здесь здесь. В SAP GUI есть инструмент для записи макросов, как это делает 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

Script Запись

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

Изменить: ранняя и поздняя привязка

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

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