我在Powerpoint中的VBA代码不会“杀死”我的Excel应用程序。 如果我看一下任务管理器,它仍会运行。
我想以正确的方式关闭它而不是杀死它。
任何可以帮助我的人?我已经搜索并试图让它工作但没有运气。
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
答案 0 :(得分:2)
在xlApp.Quit
Set xlApp = Nothing
答案 1 :(得分:1)
Set xlApp = Nothing
该指令将xlApp
对象引用设置为Nothing
。它不会破坏它所引用的对象,但它会阻止进一步的代码使用 引用。
Excel是一个相当复杂的应用程序;创建Excel.Application
对象的实例有很多含义,为了正确关闭自己,它需要运行一定的指令序列(卸载Excel和COM加载项,关闭所有打开的文件,拆除VBE如果它被初始化 - 反过来可能需要拆除它自己的插件等) - 通过设置你对Nothing
的引用,你说"我不需要它再" - 但是仍然使用它的COM加载项是什么?仍然打开的工作簿是Workbook
对象,其Application
属性也引用了您所指的同一个对象 - 而这些引用不是&#39已经过去了!
正如Tim和Tom所述,您需要调用Quit
实例的Excel.Application
方法,以便它可以清理自己。
如果那是你的代码做的最后一件事,那么你可能甚至不需要Set xlApp = Nothing
,因为VBA运行时会知道它不需要保持在xlApp
引用超出范围之后; Set xlWorkbook = Nothing
也是多余的。
退出Excel将关闭您已打开的未经修改的工作簿,但由于您打开它,我认为自己关闭它是一种好形式 - 只是在致电xlWorkbook.Close
之前致电xlApp.Quit
。