Макрокод не ожидает загрузки файла из SAP
Я пытаюсь получить экспорт из SAP. После завершения экспорта мне нужно закрыть файл экспорта. Я написал код ниже, чтобы выполнить то же самое, но моя проблема заключается в том, что код не ждет, пока файл загрузится, и пропускает файл экспорта. пожалуйста, помогите мне разобраться с этой проблемой.
Sub FBL5N()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False
Dim sApplication
Dim session
Dim file As String
Dim objShell As Object
Dim strFolder As String
Dim wb As Workbook
Dim wbk As Workbook
Dim ws As Worksheet
Dim lrw As Integer
Dim Wshell As Object
Set objShell = CreateObject("Wscript.Shell")
strFolder = objShell.SpecialFolders("mydocuments") & "\Temp\"
file = strFolder & "\ARREPORT.xlsx"
If FileExists(file) Then 'See above
SetAttr file, vbNormal
On Error Resume Next
Kill file
On Error Resume Next
End If
If Not IsObject(sApplication) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set sApplication = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = sApplication.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 sApplication, "on"
End If
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nFBL5N"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtDD_KUNNR-LOW").Text = ThisWorkbook.Sheets("Formulated").Range("R9")
session.findById("wnd[0]/usr/ctxtDD_KUNNR-HIGH").Text = ThisWorkbook.Sheets("Formulated").Range("R10")
session.findById("wnd[0]/usr/ctxtDD_BUKRS-LOW").Text = ThisWorkbook.Sheets("Formulated").Range("R8")
session.findById("wnd[0]/usr/ctxtPA_STIDA").Text = ThisWorkbook.Sheets("Formulated").Range("R11")
session.findById("wnd[0]/usr/ctxtPA_VARI").Text = ThisWorkbook.Sheets("Formulated").Range("R12")
session.findById("wnd[0]/usr/ctxtPA_VARI").SetFocus
session.findById("wnd[0]/usr/ctxtPA_VARI").caretPosition = 12
session.findById("wnd[0]/mbar/menu[0]/menu[0]").Select
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select
session.findById("wnd[1]/usr/ctxtDY_PATH").Text = strFolder
session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "export.xlsx"
session.findById("wnd[1]").sendVKey 0
Application.Wait Now() + TimeValue("00:00:01")
For Each wb In Application.Workbooks
If wb.Name = "export.xlsx" Then
wb.Close
End If
Next wb
End Sub
1 ответ
Я просто приведу пример. Так как я думаю, что мое редактирование немного за борт, и я уважаю этот сайт здесь, чтобы научить людей не просто делать всю работу за кого-то. Более того, направляйте их, чтобы они действительно узнали, что означают все сделанные мной изменения и почему я их сделал.
'This is the fun stuff using your computer to sleep in milliseconds. Since we are teaching and i am not going to assume anything. Here is the code for both versions of excel.
'Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)' API Call for 64bit excel
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ' API Call for 32bit excel
' This is turning off all your screen update functions
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.AskToUpdateLinks = False
End with
' Add Code here
' You can remove your application.wait and try
Sleep 100 ' this is milliseconds so you may have to fine tune it by adding more time or less
Doevents ' Doevents lets the macro keep running and will keep "Not Responding" from showing up at the top of your workbook.
BeforeExit: ' I always add a BeforeExit: So i Don't forget to turn my settings back on to see my hard work
Set objShell = nothing ' It is good practice to always release your objects as well
With Application
.ScreenUpdating = true
.DisplayAlerts = true
.AskToUpdateLinks = true
End with
Можете ли вы объяснить мне немного о SAP? Я вижу ваш код и вижу ваши звонящие ключи, которые я не уверен, что это для SAP или Excel. Не рекомендуется избегать вызова функций клавиатуры.