2017-03-29 66 views
1

Powerpoint中的我的VBA代码不会“杀死”我的Excel应用程序。 它仍然运行,如果我看看任务管理器。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 
+1

'xlApp.Quit'会做到这一点 –

回答

1
Set xlApp = Nothing 

。它不会破坏它所指的对象,但它可以防止使用引用的其他代码。

Excel是一个相当复杂的应用程序;创建一个Excel.Application对象的实例有很多含义,为了正确关闭它,它需要运行一定的指令序列(卸载Excel和COM加载项,关闭所有打开的文件,如果它打开了VBE被初始化 - 这又可能需要拆除它自己的加载项等) - 通过将你的参考设置为Nothing,你说“我不再需要它了” - 但是什么COM加载项仍然是用它?该工作簿仍然打开的是Workbook对象,其中Application属性也引用了您所指的同一对象 - 而这些引用尚未消失!

由于TimTom表示,您需要调用实例的Quit方法,以便它可以自行清理。

如果这是你的代码做的最后一件事,那么你可能甚至不需要Set xlApp = Nothing,因为VBA运行时会知道它并不需要扶住xlApp参考这是超出范围后; Set xlWorkbook = Nothing也是多余的。

退出Excel将关闭你已经打开的工作簿未修改,但由于打开一看,我认为这是很好的形式,以自己关闭它 - 只要拨打xlWorkbook.Close你叫xlApp.Quit之前。

+0

只是不可思议。多谢你们! – ante011

2

尝试指令将xlApp对象引用NothingxlApp.Quit之前Set xlApp = Nothing