Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA关闭从SAP导出的Excel时出现问题_Excel_Vba_Sap - Fatal编程技术网

使用VBA关闭从SAP导出的Excel时出现问题

使用VBA关闭从SAP导出的Excel时出现问题,excel,vba,sap,Excel,Vba,Sap,我运行一个宏,从SAP下载Excel报告,保存它,然后需要关闭Excel。我在这一页上读过类似的文章,但没有一篇能解决我的问题 问题是宏完成后,从SAP下载的excel会自动打开。就像Excel在后台运行一样。 因此,如果我在宏期间关闭它,代码将找不到打开的Excel(这是有意义的,因为Excel尚未打开),并给出错误。。但是当宏完成时,excel会出现(这是因为SAP配置,下载电子表格时excel会自动打开。我尝试过更改SAP配置,但没有成功) 我试着放置应用程序。等等,工作簿。关闭,杀死工作

我运行一个宏,从SAP下载Excel报告,保存它,然后需要关闭Excel。我在这一页上读过类似的文章,但没有一篇能解决我的问题

问题是宏完成后,从SAP下载的excel会自动打开。就像Excel在后台运行一样。 因此,如果我在宏期间关闭它,代码将找不到打开的Excel(这是有意义的,因为Excel尚未打开),并给出错误。。但是当宏完成时,excel会出现(这是因为SAP配置,下载电子表格时excel会自动打开。我尝试过更改SAP配置,但没有成功)

我试着放置应用程序。等等,工作簿。关闭,杀死工作簿(它会导致一个问题,因为弹出窗口显示wb不存在),调用另一个子系统,等等

我尝试了一个我在本页中读到的解决方案,它是添加wshell部分,但在我的代码中不起作用

TestExcel.xlsm

        Sub test

        'Sap conection

        Application.DisplayAlerts = False
        Application.ScreenUpdating = False

        session.findById("wnd[0]").maximize
        session.findById("wnd[0]/tbar[0]/okcd").Text = "/nzv04hn"
        session.findById("wnd[0]").SendVKey 0
        session.findById("wnd[0]/usr/ctxtS_VKORG-LOW").Text = "CR01"
        session.findById("wnd[0]/usr/ctxtS_AUART-LOW").Text = "zor"
        session.findById("wnd[0]/usr/chkP_PGI").SetFocus
        session.findById("wnd[0]").SendVKey 8
        session.findById("wnd[1]/tbar[0]/btn[0]").press
        session.findById("wnd[0]").SendVKey 43
        session.findById("wnd[1]/usr/ctxtDY_PATH").Text = "C:\Users\xxx\Desktop\"
        session.findById("wnd[1]/usr/ctxtDY_FILENAME").Text = "CR01ZV04HN.XLSX"
        session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 4
        session.findById("wnd[1]/tbar[0]/btn[7]").press

        Application.DisplayAlerts = True
        Application.ScreenUpdating = True

        Set Wshell = CreateObject("WScript.Shell")
        Wshell.Run "C:\Users\Desktop\xxx\SAP_Workbook_Close.vbs", 1, False
        End sub
SAP_工作簿_Close.vbs

SAP_Workbook = "CR01ZV04HN.XLSX" 
on error resume next
do
err.clear
Set xclApp = GetObject(, "Excel.Application")
If Err.Number = 0 Then exit do
'msgbox "Wait for Excel session"
wscript.sleep 2000
loop

do 
err.clear
Set xclwbk = xclApp.Workbooks.Item(SAP_Workbook)
If Err.Number = 0 Then exit do
'msgbox "Wait for SAP workbook"
wscript.sleep 2000
loop

on error goto 0 
Set xclSheet = xclwbk.Worksheets(1)

xclApp.Visible = True
xclapp.DisplayAlerts = false

xclapp.ActiveWorkbook.Close


Set xclwbk = Nothing
Set xclsheet = Nothing
'xclapp.Quit
set xclapp = Nothing

提前感谢您的帮助。

在您的原始工作簿中尝试此操作:
Application.DisplayAlerts=False:Application.Quit
它不起作用。请尝试
xclapp.Quit
在第
xclapp.ActiveWorkbook.Close
行后退出。若要查看您的程序有多远,请在脚本中激活以下命令:msgbox“等待Excel会话”和msgbox“等待SAP工作簿”如果在代码中显式打开工作簿并将其关闭,会发生什么情况?