从Excel复制到Powerpoint错误



再次借助围绕stackoverflow的资源,我一直在使用以下代码将信息从Excel 2010复制到Powerpoint 2010幻灯片中。我在幻灯片中重复了大约 20 次中间的代码。

我开始间歇性地收到消息

Run-time error -2147417851 (80010105) method 'pastespecial' of object 'shapes' failed

在这一行上:

Set ppShape = PPSlide.Shapes.PasteSpecial(DataType:=ppPasteOLEObject, Link:=msoFalse)

以下是代码的其余部分:

Sub PPTReport()
Dim PPApp As PowerPoint.Application
Dim PPSlide As PowerPoint.Slide
Dim PPPres As PowerPoint.Presentation
Set PPApp = CreateObject("Powerpoint.Application")
Dim SlideNum As Integer
Dim wbk As Workbook
'Dim ppShape As PowerPoint.Shape
Dim ppShape As Object
Set XLApp = GetObject(, "Excel.Application")
''define input Powerpoint template
    Dim strPresPath As String, strExcelFilePath As String, strNewPresPath As String
''# Change "strPresPath" with full path of the Powerpoint template
strPresPath = ThisWorkbook.Path & "templatetemplate.ppt"
''# Change "strNewPresPath" to where you want to save the new Presentation to be created
strNewPresPath = ThisWorkbook.Path & "electra_status_report-" & Format(Date, "yyyy-mm-dd") & ".ppt"
    Set PPPres = PPApp.Presentations.Open(strPresPath)
    PPPres.Application.Activate

PPApp.Visible = True
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''define destination slide
    SlideNum = 1
    PPPres.Slides(SlideNum).Select
    Set PPSlide = PPPres.Slides(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)
''define source sheet
strFirstFile = ThisWorkbook.Path & "workstreamsws1.xlsx"
Set wbk = Workbooks.Open(strFirstFile)
wbk.Sheets("WS1").Activate
    Cells(1, 1).Activate
'copy/paste from
    XLApp.Range("WS1Dash").Copy
Set ppShape = PPSlide.Shapes.PasteSpecial(DataType:=ppPasteOLEObject, Link:=msoFalse)
'place size and shape 72 ppi
ppShape.Width = 718
ppShape.Left = 1
ppShape.Top = 16
    PPPres.Application.Activate
    wbk.Sheets("WS1").Activate
    Cells(1, 1).Copy
wbk.Close savechanges:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''define destination slide
    SlideNum = 2
    PPPres.Slides(SlideNum).Select
    Set PPSlide = PPPres.Slides(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)
''define source sheet
strFirstFile = ThisWorkbook.Path & "workstreamsws2.xlsx"
Set wbk = Workbooks.Open(strFirstFile)
wbk.Sheets("WS2").Activate
    Cells(1, 1).Activate
'copy/paste from
    XLApp.Range("WS2Dash").Copy
Set ppShape = PPSlide.Shapes.PasteSpecial(DataType:=ppPasteOLEObject, Link:=msoFalse)
'place size and shape 72 ppi
ppShape.Width = 718
ppShape.Left = 1
ppShape.Top = 16
    PPPres.Application.Activate
    wbk.Sheets("WS2").Activate
    Cells(1, 1).Copy
wbk.Close savechanges:=False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'    Sheets("Dashboard").Activate
' Close presentation
    PPPres.SaveAs strNewPresPath
    PPPres.Close
' Quit PowerPoint
    PPApp.Quit
' Clean up
Set PPSlide = Nothing
Set PPPres = Nothing
Set PPApp = Nothing
   AppActivate "Microsoft Excel"
MsgBox "Presentation Created", vbOKOnly + vbInformation
End Sub

关于如何解决此错误的任何想法?

您面临的问题是因为复制需要时间并且下一行正在执行,并且在剪贴板中找不到要粘贴的任何内容。

处理此问题的两种方法

方式 1

XLApp.Range("WS1Dash").Copy
DoEvents
Set ppShape = PPSlide.Shapes.PasteSpecial(DataType:=ppPasteOLEObject, Link:=msoFalse)

方式 2

XLApp.Range("WS1Dash").Copy
Wait 2
Set ppShape = PPSlide.Shapes.PasteSpecial(DataType:=ppPasteOLEObject, Link:=msoFalse)

并将其粘贴到程序的底部

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While nSec > Timer
        DoEvents
    Wend
End Sub

莱姆知道这是否没有帮助...

我遇到了同样的问题,当我试图在没有PowerPoint参考的情况下从Excel导出到PowerPoint时,它发生了,将其用作对象。棘手的是,有时它有效,有时它不会。因此,经过一些测试,我发现这取决于PowerPoint视图的状态,如果它显示缩略图或普通幻灯片视图。

要修复它,请在粘贴前将视图类型设置为正常。

PPAP.ActiveWindow.ViewType = ppViewNormal

PPAP.ActiveWindow.ViewType = 9

PPAP 代表 PowerPoint Application Object。

最新更新