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