Powerpoint VBA 不要关闭 Excel

Powerpoint VBA dont close Excel

我的 VBA Powerpoint 代码不会 "kill" 我的 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

Set xlApp = Nothing

之前尝试 xlApp.Quit
Set xlApp = Nothing

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

Excel 是一个相当复杂的应用程序;创建 Excel.Application 对象的实例有很多含义,为了正确关闭自身,它需要 运行 通过特定的指令序列(卸载 Excel 和 COM 加载项,关闭任何打开的文件,如果 VBE 已初始化则拆除它 - 这反过来可能需要拆除它自己的加载项等) - 通过设置对 Nothing 的引用,你说 "I don't need it anymore" - 但是仍然使用它的 COM 加载项是什么?那个仍然打开的工作簿是一个 Workbook 对象,它有一个 Application 属性 也引用了你所引用的同一个对象 - 和 这些 引用还没走!

正如 and 所说,您需要调用Excel.Application实例的Quit方法,以便它能够自行清理。

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

退出 Excel 将关闭您打开的未修改的工作簿,但由于 打开它,我认为自己关闭它是一种很好的形式 -在调用 xlApp.Quit.

之前先调用 xlWorkbook.Close