Закройте несколько файлов excel для экспорта sap с помощью vba

Это мой код для сценария SAP GUI, в котором при нажатии кнопки я экспортирую данные в файл. У меня есть несколько строк, будет создано 100 файлов. мне нужно вручную закрыть все файлы.

Кто-нибудь может помочь, как закрыть все новые открытые файлы Excel. Какой код мне в него добавить

Dim ws As Worksheet
Dim lrow As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
Dim lastrow As Long
lastrow = ws.UsedRange.Rows.Count

If Not IsObject(SAPApp) Then
   Set SapGuiAuto = GetObject("SAPGUI")
   Set SAPApp = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
   Set Connection = SAPApp.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

lrow = ws.Cells(Rows.Count, "A").End(xlUp).Row

For i = 2 To lrow
If ws.Cells(i, "G") = True Then

session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nfbl3n"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/radX_AISEL").Select
session.findById("wnd[0]/usr/ctxtSD_SAKNR-LOW").Text = ws.Range("A" & i)
session.findById("wnd[0]/usr/ctxtSD_SAKNR-HIGH").Text = ws.Range("B" & i)
session.findById("wnd[0]/usr/ctxtSD_BUKRS-LOW").Text = ws.Range("C" & i)
session.findById("wnd[0]/usr/ctxtSD_BUKRS-HIGH").Text = ws.Range("D" & i)
session.findById("wnd[0]/usr/ctxtSO_BUDAT-LOW").Text = ws.Range("E" & i)
session.findById("wnd[0]/usr/ctxtSO_BUDAT-HIGH").Text = ws.Range("F" & i)
session.findById("wnd[0]/usr/ctxtSO_BUDAT-HIGH").SetFocus
session.findById("wnd[0]/usr/ctxtSO_BUDAT-HIGH").caretPosition = 10
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/ctxtDY_PATH").Text = Cells(1, "K").Value
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = Cells(i, "H").Value
session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 10
session.findById("wnd[1]/tbar[0]/btn[11]").press
End If
Next i
End Sub'''

person tarun    schedule 22.09.2020    source источник
comment
Ваш вопрос можно упростить до одной книги Excel: как автоматически закрывать окно при его открытии, и решение не связано ни с SAP GUI, ни с SAP GUI Scripting API, а с классическим программированием Windows для выполнения бесконечного цикла, пока не откроется окно Excel , используя Do: bWindowFound = Wshell.AppActivate("???"): WScript.Sleep 1000: Loop Until bWindowFound или, возможно, GetObject(,"Excel.Application"). Наверное, есть какие-то ответы.   -  person Sandra Rossi    schedule 22.09.2020
comment
Это я использую в своем excel vba для выполнения задачи в sap GUI. WScript.Sleep 1000 не работает в VBA для SAP   -  person tarun    schedule 22.09.2020
comment
Код, который я опубликовал, является неполным, он нужен только для того, чтобы помочь вам искать в Интернете полные коды. Он работает с VBA, просто создайте экземпляр объекта WScript. Конечно, в приложении Excel также есть метод сна.   -  person Sandra Rossi    schedule 22.09.2020


Ответы (2)


Все развивается. Также возможности, которые были известны до сих пор. Недавно вы также могли попробовать следующее. Например:

...
session.findById("wnd[1]/tbar[0]/btn[0]").press
'-------------new-------------------------------------------------------
'Is it really a number = 1 or a parameter = i?
myPath = Cells(1, "K").Value
myFileName = Cells(i, "H").Value
session.findById("wnd[1]/usr/ctxtDY_PATH").Text = myPath
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = myFileName
'not necessary and with a file name shorter than 10 it would even be wrong
'session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 10
session.findById("wnd[1]/tbar[0]/btn[11]").press

myCount = Workbooks.Count
Do
 DoEvents
 Application.Wait Now + TimeSerial(0, 0, 5)
 DoEvents
 If Workbooks.Count > myCount Then Exit Do
Loop

Dim xlApp As Object

Set xlApp = GetObject(myPath & "\" & myFile).Application

For j = 1 To Workbooks.Count
 If LCase(Workbooks(j).Name) = LCase(myFile) Then Exit For
Next j

xlApp.Workbooks(j).Close SaveChanges:=False
Set xlApp = Nothing
'--------------new-------------------------------------------------------

Next i
...

С уважением, ScriptMan

person ScriptMan    schedule 23.09.2020
comment
спасибо сценаристу за код, но он закрывает только файл макроса. - person tarun; 24.09.2020
comment
Это потому, что у меня не было времени на тестирование. Теперь я нашел время. Вы можете увидеть результат выше. - person ScriptMan; 25.09.2020
comment
Я попробовал, но ничего не вышло. сначала он не настраивает путь. Установите xlApp = GetObject (myPath & \ & myFile) .Application. Я явно пытался установить путь для первого файла - person tarun; 25.09.2020
comment
Установите xlApp = GetObject (C: \ Users \ khthakur \ Desktop \ Khush \ test \ 1.xlsx) .Application, но затем оно не удалось на xlApp.Workbooks (j). Закройте SaveChanges: = False @scriptman. - person tarun; 25.09.2020
comment
Извините, но моя программа VBA у меня работает нормально. Мы сможем вам помочь, только если вы предоставите нам полную программу. - person ScriptMan; 25.09.2020
comment
Это полная программа - person tarun; 25.09.2020
comment
Я могу видеть только одну из ваших программ VBA, которая является неполной, и фрагмент моего кода. Вы должны показать нам свою текущую программу в целом. И пример для первых 4 строк данных, которые вы получаете из Excel. - person ScriptMan; 25.09.2020
comment
@ scriptman - это сработало. Также вы знаете, как работать с Как остановить всплывающее окно; Безопасность SAP GUI. - person tarun; 25.09.2020

Любой орган знает, как с этим справиться -Как остановить всплывающее окно; SAP GUI Security с использованием сценария VBA при экспорте Excel

введите здесь описание изображения

person tarun    schedule 25.09.2020
comment
Самый простой способ - отключить настройки безопасности: (Alt / F12 = ›Options =› Security = ›Security Options =› Status = ›деактивировано). Если вам нужны особые настройки, вам нужно будет спросить кого-нибудь из ИТ-отдела вашей компании. - person ScriptMan; 25.09.2020
comment
Есть ли для этого сценарий vba? если он отключен с помощью сценария vba - person tarun; 25.09.2020
comment
Нет, не существует. Его нужно установить вручную только один раз. Или вы можете запустить файл REG: Редактор реестра Windows версии 5.00 [HKEY_CURRENT_USER \ SOFTWARE \ SAP \ SAPGUI Front \ SAP Frontend Server \ Security] SecurityLevel = dword: 00000000 - person ScriptMan; 25.09.2020