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
我的 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
属性 也引用了你所引用的同一个对象 - 和 这些 引用还没走!
正如Excel.Application
实例的Quit
方法,以便它能够自行清理。
如果这是您的代码所做的最后一件事,那么您可能甚至不需要 Set xlApp = Nothing
,因为 VBA 运行时间会知道它不需要超出范围后需要保留 xlApp
引用; Set xlWorkbook = Nothing
也是多余的。
退出 Excel 将关闭您打开的未修改的工作簿,但由于 您 打开它,我认为自己关闭它是一种很好的形式 -在调用 xlApp.Quit
.
xlWorkbook.Close