Powerpoint VBA不要关闭Excel

时间:2017-03-29 19:18:43

标签: excel vba excel-vba powerpoint

我在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

2 个答案:

答案 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已经过去了!

正如TimTom所述,您需要调用Quit实例的Excel.Application方法,以便它可以清理自己。

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

退出Excel将关闭您已打开的未经修改的工作簿,但由于打开它,我认为自己关闭它是一种好形式 - 只是在致电xlWorkbook.Close之前致电xlApp.Quit