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.