使用Excel VBA关闭Powerpoint对象(不使用Powerpoint.Application)

希望有人可以用一些VBA代码来帮助我。 我使用VBA循环将Excel图表,文本框和表格粘贴到Powerpoint模板中。 但是,因为我不能确定用户是否安装了Powerpoint对象库,所以我不能使用Dim PPTApp作为Powerpoint.Application类型的语法。

我使用对象。 它效果很好。 除了单件:关闭Powerpoint。

码:

Dim oPPTPres As Object  ' Late binding: This is a PowerPoint.Presentation but we cannot assume that the Microsoft PowerPoint 11 library will be loaded in the workbook that this module has been copied to.
Dim oPPTShape As Object ' Late binding: This is a PowerPoint.Shapebut we cannot assume that the Microsoft PowerPoint 11 library will be loaded in the workbook that this module has been copied to.


PPTFile = Range("PPTFile").value ' Read PowerPoint template file name
Set oPPTPres = GetObject(PPTFile): oPPTPres.Application.Visible = msoTrue ' Switch to or open template file

。 。 。 。

strNewPresPath = Range("OutputFileName").value
oPPTPres.SaveAs strNewPresPath
' Range("PPTFile").value = strNewPresPath
ScreenUpdating = True
oPPTPres.Close 'Closes presentation but not Powerpoint
oPPTPres.Application.Quit 'No noticeable effect

活动演示文稿将关闭,但Powerpoint本身保持打开状态(没有文件窗口打开)。 然后,因为它是开放的,所以当下一个运行时(我有一个循环可以循环并连续执行这些构建中的很多),它会打开模板以及最新的内置Powerpoint文件,创建系统锁定问题。

有任何想法吗?

非常感谢您的帮助!


我不完全确定你的代码为什么不起作用。 我试图将oPPTPres = Nothing设置为无效。 但是,以下方式PowerPoint在我的计算机上关闭

Dim oPPTPres As Object  ' Late binding: This is a PowerPoint.Presentation but we cannot assume that the Microsoft PowerPoint 11 library will be loaded in the workbook that this module has been copied to.
Dim oPPTShape As Object ' Late binding: This is a PowerPoint.Shapebut we cannot assume that the Microsoft PowerPoint 11 library will be loaded in the workbook that this module has been copied to.
Dim oPPTApp As Object

Set oPPTApp = CreateObject("PowerPoint.Application")
oPPTApp.Visible = True

Set oPPTPres = oPPTApp.Presentations.Open(PPTFile)

...

oPPTPres.Close
Set oPPTPres = Nothing
oPPTApp.Quit
Set oPPTApp = Nothing

JMP,

Sean在从内存中删除对象方面是正确的,但是如果您将指针存储在其他变量中,则需要确保释放对您的PowerPoint对象的任何和所有直接引用。 值得注意的是,这不会杀死应用程序并停止线程 - 它只会释放您的应用程序变量。

Paul B的关闭powerpoint的方法应该可以正常工作,而这篇SO Article文章采用了一种软方法和一种关闭应用程序的强力方法,如果它们留在内存中的话。

我在我的机器上从Excel中对相对权限限制的设置进行了适配和测试,这个简单的暴力破解方法立即杀死了Powerpoint应用程序:

Sub ForcePowerpointExit()


Dim BruteForce As String
BruteForce = "TASKKILL /F /IM powerpnt.exe"

Shell BruteForce, vbHide

End Sub

这为您提供了另一种杀死应用程序的选项。


我相信所有其他海报至少部分是正确的。 保罗B.的答案应该在大多数情况下工作。

唯一需要注意的是,如果您直接从用户窗体或用户窗体直接引用的对象中调用Powerpoint VBA代码。

在这种情况下,仍有一个对象引用等待从内存中删除。

将所有VBA PowerPoint代码移动到模块中,并在启动自动化(Powerpoint)代码之前隐藏用户表单。

链接地址: http://www.djcxy.com/p/45675.html

上一篇: Close Powerpoint Object with Excel VBA (NOT using Powerpoint.Application)

下一篇: File uploading certain MIME Types