【问题标题】:VBA PowerPoint Copy/Paste InconsistenciesVBA PowerPoint 复制/粘贴不一致
【发布时间】:2013-03-14 23:47:56
【问题描述】:

我编写了一个 VBA 脚本,它在一个 PowerPoint (PRS_data) 中搜索标题匹配,然后将幻灯片复制到新的 PowerPoint (PRS)。源上的幻灯片只是标题和图像。当某些幻灯片被复制时,图像要么没有被保留,要么我得到一个带有红色 X 的框。

我使用的是 PowerPoint 2007 SP3,所以红色 X 修补程序不是问题。

我也尝试添加 DoEvents 和 Sleep,但没有成功。

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

以前有人遇到过这个吗??

代码如下:

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

【问题讨论】:

  • 您是否尝试使用 F8 键调试进程?所有if 语句都可以正常工作??
  • 换句话说——如果你去掉两个if's 语句,你的代码是否会按预期复制所有幻灯片??
  • 是的,通过调试没有显示任何不同的行为。这个问题似乎与窗口是否真的在屏幕上有关。
  • if 语句不是问题,因为幻灯片正在复制到目标位置,因为标题显示在目标位置的空白幻灯片上。只是图像没有出现在 一些 幻灯片上。

标签: vba clipboard copy-paste powerpoint


【解决方案1】:

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

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

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

【讨论】:

  • 好点。您是否有任何推荐的替代方法来使用剪贴板将这些幻灯片移动到目标 PPT,这样会更有效并因此解决此问题?
  • 您可以使用 ActivePresentation.Slides.InsertFromFile 将整个幻灯片从源演示文稿带入目标演示文稿。您必须打开源演示文稿(可能希望无窗口地执行此操作)才能找到要插入的幻灯片的索引,关闭它,然后进行插入。 OTOH,PPT 可能会让您从打开的演示文稿中插入;我没试过那个闪避。如果有很多这些事情要做,您将通过打开一次源代码来节省时间,“缓存”您需要的信息和数组中的索引号等,而不是每次都打开源代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多