2017-03-29 69 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