Powerpoint VBA不closuresExcel

Powerpoint中的我的VBA代码不会“杀死”我的Excel应用程序。 它仍然运行,如果我看看任务pipe理器。

我想以正确的方式closures它,而不是杀死。

任何人都可以帮助我? 我已经search,试图让它工作,但没有运气。

Public Sub OnSlideShowPageChange(ByVal Wn As SlideShowWindow) If Wn.View.CurrentShowPosition = 2 Then Dim xlApp As Object Dim xlWorkBook As Object Set xlApp = CreateObject("Excel.Application") xlApp.Visible = False Set xlWorkBook = xlApp.Workbooks.Open("D:\ELE_powerpoint\book1.xlsx", True, False) With xlWorkBook.ActiveSheet txt1 = xlWorkBook.sheets(1).Range("A2") txt2 = xlWorkBook.sheets(1).Range("A3") txt3 = xlWorkBook.sheets(1).Range("A4") End With ActivePresentation.Slides(2).Shapes("a2").TextFrame.TextRange = txt1 ActivePresentation.Slides(2).Shapes("a3").TextFrame.TextRange = txt2 ActivePresentation.Slides(2).Shapes("a4").TextFrame.TextRange = txt3 Set xlApp = Nothing Set xlWorkBook = Nothing End If End Sub 

 Set xlApp = Nothing 

该指令将xlApp对象引用设置为Nothing 。 它不会销毁它引用的对象,但会阻止进一步的代码使用引用。

Excel是一个相当复杂的应用程序; 创build一个Excel.Application对象的实例有很多含义,为了正确closures自身,需要运行一系列的指令(卸载Excel和COM加载项,closures所有打开的文件,拆除VBE如果它被初始化 – 这又可能需要拆除它自己的加载项等) – 通过将您的引用设置为Nothing ,您说“我不再需要它” – 但是什么COM加载项还在用吗? 仍然打开的Workbook是一个带有Application属性的Workbook对象,它也引用了您所指的同一个对象 – 而这些引用还没有被删除!

正如Tim和Tom所说,您需要调用Excel.Application实例的Quit方法,以便自行清理。

如果这是你的代码所做的最后一件事情,那么你甚至可能甚至不需要Set xlApp = Nothing ,因为VBA运行时会知道在xlApp引用超出范围之后它不需要保留; Set xlWorkbook = Nothing是多余的。

退出Excel将closures您打开的未修改的工作簿,但是由于打开了它,因此我认为自己closures它是一种很好的forms – 在调用xlWorkbook.Close之前调用xlApp.Quit

Set xlApp = Nothing之前尝试xlApp.Quit