Я пытаюсь создать сценарий, который извлекает данные из огромного отчета в SAP, выполняет некоторую очистку в Excel и затем загружает его в Access. По крайней мере, это моя конечная цель. Данные в SAP немного загрязнены, поэтому мы прибегаем к Access как месту, где очищаются данные, характерные для нашего отдела.
Я новичок в написании сценариев (спустя 20 лет, я не помню, что я знал), но я использовал встроенные макрогенераторы как в SAP, так и в Excel и получил часть пути к тому, что Я хочу. Сейчас я столкнулся с ошибкой «Microsoft Excel ожидает, что другое приложение завершит действие OLE». Это возможно, потому что мой отчет занимает очень много времени. Он останавливает процесс, и это должно быть то, что я могу установить и забыть, а также получить данные утром. Сценарий запускается как макрос в Excel, подключается к SAP и запускает там отчет. Отчет запускается, а затем использует SAP для экспорта обратно в Excel. Учитывая размер отчета, я могу запустить его всего за один или два месяца, но мне нужно получить данные за целый год. Я полагаю, что сценарий может повторяться 6 раз, 2 месяца за раз. Что-нибудь более двух месяцев, и отчет будет тайм-аут до того, как он что-нибудь произведет. Я пытался использовать «Запуск в фоновом режиме на SAP, чтобы упростить это, но на выходе генерируется настолько искажены, чтобы быть бесполезным. Вот то, что я до сих пор.Повторяющийся скрипт, который отправляется из SAP в Excel и обратно
Sub Experimental1()
' start the SAP portion
Dim SapGuiAuto, application, connection, session, WScript
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject application, "on"
End If
'
' ***the above is key to opening a script in SAP. SAP must be running for this to work***
' begin ZSPWAR launch
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "zspwar"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 17
session.findById("wnd[1]/usr/txtENAME-LOW").Text = ""
session.findById("wnd[1]/usr/txtENAME-LOW").SetFocus
session.findById("wnd[1]/usr/txtENAME-LOW").caretPosition = 0
session.findById("wnd[1]").sendVKey 8 session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").currentCellRow = 8
session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").selectedRows = "8"
session.findById("wnd[1]").sendVKey 2
' adjust the date
session.findById("wnd[0]/usr/ctxtS_DATE-LOW").Text = (Date)
session.findById("wnd[0]/usr/ctxtS_DATE-HIGH").Text = (Date)
session.findById("wnd[0]/usr/ctxtS_LGORT-LOW").SetFocus
session.findById("wnd[0]/usr/ctxtS_LGORT-LOW").caretPosition = 0
session.findById("wnd[0]/tbar[1]/btn[8]").press
'begins save portion of script
'ignore warning from excel and keep going through long task
'application.IgnoreRemoteRequests = True
' end caffeine like behavior
session.findById("wnd[0]").maximize
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.findById("wnd[1]/usr/cmbG_LISTBOX").Key = "08"
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").Select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
'Ends Save portion
'back into Excel
ChDir _
"G:\Warranty\Strategy's\Special Projects\001 Process and Procedure Documentation\Databases\Core Return Database"
ActiveWorkbook.SaveAs Filename:= _
"G:\Warranty\Strategy's\Special Projects\001 Process and Procedure Documentation\Databases\Core Return Database\ZSPWAR test1.xlsx" _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Это делает то, что я хочу, за исключением I должны нянчить через сообщение об ошибке первенствовать, и я не знаю, как получить фокус обратно в SAP
Спасибо за любую помощь или статьи вы можете направлять меня.
Try: Файл-> Настройки-> Дополнительно и под General проверить _Ignore другие приложения, использующие DDE_ –
Application.DisplayAlerts = False , кажется, работает, когда я создаю отдельный макрос, который запускает эту строку сначала включается основной макрос в качестве подпрограммы. –