PowerPoint VBA - 粘贴特殊(增强型图元文件)错误

时间:2010-07-15 22:56:34

标签: vba powerpoint powerpoint-vba

我在PowerPoint 2003 SP3中使用宏来查找Excel工作簿中的指定图表,复制它,然后将其作为增强型图元文件粘贴到当前幻灯片中,最终使用以下代码行:

Application.ActiveWindow.View.PasteSpecial DataType:=ppPasteEnhancedMetafile

尽管它有效,我也会收到以下错误:

Run-time error '-2147188160 (80048240)':
View (unknown member) : Invalid request. The specified data type is unavailable.

如果我结束宏并尝试手动粘贴Special作为增强型图元文件,我没有问题,所以它不像剪贴板对象或pastespecialtype无效。

还有其他人经历过这个吗?您有解决方案或解决方法吗? Google搜索中此错误的结果很少,也没有解决方案。


更新

一般代码如下:

Set presPPTCurrent = ActivePresentation
Set objXLApp = GetObject(, "Excel.Application")

''#Find the target chart and copy it to the clipboard
With objXLApp
    ''#This part works - if I go to Excel, I can see that the chart is copied
End With

''#Now paste in the chart as an Enhanced Metafile
presPPTCurrent.Application.Activate
Application.ActiveWindow.View.PasteSpecial DataType:=ppPasteEnhancedMetafile

请注意,这是在传递Shape的Sub中(传递的Shape用作在Excel中查找图表的参考)。我已经意识到当我尝试在另一个Sub中的For Next循环传递的多个形状上重用这个sub时,它只会出错。

但是,如果我通过另一个Sub将单个Shape传递给此Sub,然后重新运行传递多个Shapes的Sub,则运行正常。


的解决方案

Per Otaku提到,宏观正在失去对Slide Pane的关注。告诉它重新选择幻灯片窗格解决了这个问题。

Application.ActiveWindow.Panes(2).Activate

3 个答案:

答案 0 :(得分:3)

这可能会失去焦点,因为在Excel和PowerPoint之间切换导致PowerPoint失去焦点,因此PowerPoint没有ActiveWindow粘贴到或ActiveWindow变为不同的{{} PowerPoint中的1}},例如“幻灯片浏览”或“便笺”窗格。

答案 1 :(得分:1)

我遇到了同样的问题。我有宏将PowerPoint中的大量图表导出。但是一些复制粘贴操作以与上面相同的错误结束(运行时错误'-2147188160(80048240)':)

我意识到PasteSpecial错误不是由于失去焦点,而是由于剪贴板丢失。

因此,解决方案再次将区域重新复制到剪贴板,如:

On Error GoTo paste_error
ppSlide.Shapes.PasteSpecial(2, link:=RangeLink).Select
...
paste_error:
    Worksheets(SheetName).Range(RangeName).copy
    Resume

也许这对某人有帮助......

答案 2 :(得分:0)

我遇到了同样的错误,并在这里尝试了许多解决方案。最终为我工作的是非常简单的事情。我认为这是有效的,因为第一行保存了对幻灯片的引用。粘贴选项可以是EnhancedMetaFile而不是Bitmap。

    Sub Macro()
       Set sld = Application.ActiveWindow.View.Slide
       With GetObject(, "Excel.Application")
           .Workbooks(1).Sheets(1).Shapes(1).Copy
       End With

       sld.Shapes.PasteSpecial DataType:=ppPasteBitmap
   End Sub