使用集成的VBA我运行此代码三次
Option Explicit
Sub test()
Dim objPresentation As PowerPoint.Presentation
Set objPresentation = Application.Presentations.Open("c:\test\folder\file.pptx")
objPresentation.Close
Set objPresentation = Nothing
Debug.Print Presentations.Count
For Each objPresentation In Presentations
Debug.Print objPresentation.FullName, vbTab, objPresentation.Windows.Count
Next
End Sub
请在下面找到结果
2
C:\Users\admin\Desktop\kh_tests.pptm 1
c:\test\folder\file.pptx 0
3
C:\Users\admin\Desktop\kh_tests.pptm 1
c:\test\folder\file.pptx 0
c:\test\folder\file.pptx 0
4
C:\Users\admin\Desktop\kh_tests.pptm 1
c:\test\folder\file.pptx 0
c:\test\folder\file.pptx 0
c:\test\folder\file.pptx 0
它不仅混淆了我的插件(是否是演示文稿打开),它似乎不是故意的,因为人们可能期望ppt至少重用上次留下的条目,但是进入似乎是腐败的。
我在使用PPT2016的多个系统上遇到过这种行为。
PPT2010 不显示此行为。 谢谢你的阅读 KH
我认为我更接近原因(抱歉花了很长时间但你知道它有多久);我开始相信"某人"仍然指向那个特定的演示文稿,所以它可能不会关闭;所以我决定再去一次。
我通过选择性地禁用我的com-addin中的所有内容来缩小它,但没有结果:即使没有(只是"返回")行为保持不变;但如果我没有连接我的连接点( WindowActivate ,DISPID 2009),它首先突然工作,一切顺利。根据我的日志文件,事件一直在关闭后处理,不会干扰任何事情,但谁知道。我试图强制使用DoEvents,但无济于事。
假设: WindowActivate事件接收器的存在将使PowerPoint2016不会丢弃当时当前处于活动状态的演示文稿,即使关闭此演示文稿是该事件的首要原因
测试: 不幸的是,我发现没有简单的方法来进行vba / inapp测试。有什么想法吗?
但是我的完全成熟的com插件存在(好吧,仍然很多停用,通过接收器连接),我测试了这个:
Option Explicit
Dim objCloak As PowerPoint.Presentation
Sub test()
Dim objPresentation As PowerPoint.Presentation
Set objPresentation = Application.Presentations.Open("C:\test\folder\file.pptx")
If objCloak Is Nothing Then
Set objCloak = Presentations.Add ' change to the intermediate presentation
End If
DoEvents ' relic from previous tests
objCloak.Windows(1).Activate ' ' be paranoid
DoEvents ' relic from previous tests
objPresentation.Close
DoEvents ' relic from previous tests
If (Not (Nothing Is objCloak)) Then
objCloak.Saved = True
objCloak.Close
End If
Set objCloak = Nothing
For Each objPresentation In Presentations
Debug.Print objPresentation.FullName, vbTab, objPresentation.Windows.Count
Next
End Sub
结果是
C:\Users\admin\Desktop\kh_tests.pptm 1
C:\Users\admin\Desktop\kh_tests.pptm 1
C:\Users\admin\Desktop\kh_tests.pptm 1
在两个变体之间切换回来并强制产生如上所述的结果。所以我认为这里有一些东西。
注意:PowerPoint任务现在关闭没有任何问题。