Vba 在PowerPoint演示文稿之间复制形状的合理方法

Vba 在PowerPoint演示文稿之间复制形状的合理方法,vba,powerpoint,copy-paste,Vba,Powerpoint,Copy Paste,我在这里或那里看到了许多答案,建议使用和方法在幻灯片、演示文稿和应用程序之间复制形状: 这些方法工作正常,但有副作用,因为它们在未经用户同意的情况下与剪贴板交互。当程序在后台运行一系列复制粘贴操作时,用户不可能使用剪贴板 我一直在寻找备份和恢复剪贴板的可能性,但这似乎是一种错误的方法()。不使用剪贴板进行复制的另一个原因是,如果用户在调用Paste()之前将某些内容复制到剪贴板中,则最终会得到错误的结果 有没有一种合理的方法?您可以在形状上使用.Export方法将其导出为(例如)EMF

我在这里或那里看到了许多答案,建议使用和方法在幻灯片、演示文稿和应用程序之间复制形状:

这些方法工作正常,但有副作用,因为它们在未经用户同意的情况下与剪贴板交互。当程序在后台运行一系列复制粘贴操作时,用户不可能使用剪贴板

我一直在寻找备份和恢复剪贴板的可能性,但这似乎是一种错误的方法()。不使用剪贴板进行复制的另一个原因是,如果用户在调用
Paste()
之前将某些内容复制到剪贴板中,则最终会得到错误的结果


有没有一种合理的方法?

您可以在形状上使用.Export方法将其导出为(例如)EMF,然后将其作为图片插入目标幻灯片。但是,这不会给您提供与复制/粘贴形状相同的结果

我不会太担心用户在编程复制/粘贴之间复制某些东西。即使PPT允许这样做(我不确定是否会),您的复制/粘贴操作也几乎是即时的


这仍然留下了不删除用户可能放在剪贴板上的任何其他内容的问题。Office独立于Windows系统剪贴板维护自己的剪贴板,但除了一条注释外,我找不到任何关于如何以编程方式控制它的内容。我信任的一位消息人士说,你不能,至少在2000年以后的Office版本中不能。但这可能是您需要进一步研究的问题。

在shape对象上没有.Export方法。有。您必须进入对象浏览器(按IDE中的F2键),然后右键单击对象浏览器中的任意位置并选择“显示隐藏成员”。然后intellisense将向您显示形状的.Export方法。对象浏览器中没有“显示隐藏成员”。请看我的屏幕截图。我在对象浏览器中找到了一个显示隐藏类型和成员的选项。但是,VisualStudio没有向我显示.Export方法。在这种情况下,您可能不得不求助于狡猾。请注意要导出的形状的尺寸。添加新的(可选隐藏)演示文稿,并将其尺寸设置为与形状匹配,然后将形状复制/粘贴到新演示文稿中,并使用Slide.Export方法保存为图形。但这又把我们带回了剪贴板问题,因此它可能不起作用。