Это скопировано из моего ответа здесь: https://stackoverflow.com/a/19456656/2250183
Все зависит от того, какой у вас доступ к вашей системе SAP. Программа ABAP, которая экспортирует данные и / или RFC, который ваш макрос может вызывать для прямого получения данных или создания файла в SAP, вероятно, лучше всего.
Однако, как правило, люди, ищущие такой ответ, ищут немедленное решение, которое не требует от ИТ-отдела тратить месяцы на настройку своей системы SAP.
В этом случае вы, вероятно, захотите использовать SAP GUI Scripting. Создание сценариев SAP GUI позволяет автоматизировать Windows SAP GUI во многом так же, как вы автоматизируете Excel. Фактически, вы можете вызвать SAP GUI прямо из макроса 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]
, вы можете использовать запись сценария. Нажмите кнопку настройки локального макета, это, вероятно, выглядит примерно так: ![Настроить локальный макет](https://i.stack.imgur.com/sNVoy.jpg)
Затем найдите Пункт меню "Запись и воспроизведение сценария".
![Запись и воспроизведение сценария](https://i.stack.imgur.com/13eRZ.jpg)
Внутри него кнопка More
позволяет вам для просмотра / изменения файла, в который записан сценарий VB. Формат вывода немного беспорядочный, он записывает такие вещи, как выделение текста, щелчок внутри текстового поля и т. Д.
Изменить: раннее и позднее связывание
Предоставленный сценарий должен работать, если он скопирован непосредственно в макрос VBA. Использует позднее связывание, строка Set SapGuiAuto = GetObject("SAPGUI")
определяет объект SapGuiAuto.
Однако если вы хотите использовать раннее связывание, чтобы ваш редактор VBA мог отображать свойства и методы используемых вами объектов, вам необходимо добавить ссылку на sapfewse.ocx
в установочную папку SAP GUI.
person
AndASM
schedule
31.01.2016