2013-03-25 214 views
1

我有一个VBA脚本编写,通过一个PowerPoint(PRS_data)搜索标题匹配,然后将幻灯片复制到一个新的PowerPoint(PRS)。来源上的幻灯片只是一个标题和一张图片。当一些幻灯片被复制过来时,图像不会被结转,或者我得到一个带有红色X的框。VBA PowerPoint复制/粘贴不一致

我正在使用PowerPoint 2007 SP3,因此红色X修补程序不是问题。

我也尝试添加DoEvents和睡眠以及没有成功。

如果我离开目标窗口在用户的屏幕上最大化它似乎工作,但如果它最小化,我会得到零星的空白幻灯片。结果不一致。另外,我可以确认幻灯片得到复制,因为目标是一个空的演示文稿,并且充满幻灯片,只有正确的标题。虽然结果不一致。

任何人跑到这之前?

下面是代码:

For Each Sld In PRS_data.Slides 
    If Sld.SlideIndex > 1 Then   
     If (Sld.Shapes.Title.TextFrame.TextRange.Text Like "*" & iDiv & " Division*") Then 
      PRS_data.Slides.Range(Sld.SlideIndex).Cut 
      PRS.Windows(1).Activate 
      PRS.Slides.Paste 
      DoEvents 
     End If 
    End If 
Next 
+0

您是否尝试使用F8键调试进程?所有'if'语句工作正常? – 2013-03-25 13:27:04

+0

换句话说,如果你摆脱了两个'if's'语句,你的代码是否按照预期复制了所有幻灯片? – 2013-03-25 13:35:50

+0

是通过调试不显示任何不同的行为。这个问题似乎与这个窗口是否实际上在屏幕上有关。 – 2013-03-25 13:37:17

回答

1

您不能剪切或复制后立即执行粘贴。系统上的其他程序正在对剪切做出反应,因此剪贴板尚未可用。几年前,您可能会从PowerPoint中获得“无法打开剪贴板”的错误,但不是它显然只是在默默地失败。

请注意,如果这是一个最终用户应用程序,并且他们有其他支持剪贴板的应用程序正在运行,或者正在使用远程桌面,那么这些用户会讨厌您的程序。提供剪贴板是为了方便用户,而不是开发人员。

也就是说,您可以通过在CUT/COPY命令后立即添加2秒钟的睡眠来完成此项工作。

+0

好点。您是否有推荐的替代方法来使用剪贴板将这些幻灯片移动到目标PPT,这将更有效,并因此解决此问题? – 2013-03-25 16:16:41

+2

您可以使用ActivePresentation.Slides.InsertFromFile将源幻灯片放入目标演示文稿中。您必须打开源代码演示文稿(可能需要无窗口地执行此操作)才能找到要插入的幻灯片的索引,关闭它,然后执行插入。 OTOH,PPT可能会让你插入一个开放的演示文稿;我没有尝试过闪避。如果有很多这样的功能需要完成,您可以通过打开源文件“缓存”所需的信息并将数字索引到数组或类似内容中,而不是每次打开源文件时节省时间。 – 2013-03-26 14:58:24