2013-03-25 66 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