Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Excel复制到Powerpoint错误_Excel_Runtime Error_Powerpoint_Vba - Fatal编程技术网

从Excel复制到Powerpoint错误

从Excel复制到Powerpoint错误,excel,runtime-error,powerpoint,vba,Excel,Runtime Error,Powerpoint,Vba,在stackoverflow相关资源的帮助下,我再次使用下面的代码将信息从Excel 2010复制到Powerpoint 2010幻灯片中。我在幻灯片中间重复代码大约20次。 我开始断断续续地听到这个消息 Run-time error -2147417851 (80010105) method 'pastespecial' of object 'shapes' failed 在这一行: Set ppShape = PPSlide.Shapes.PasteSpecial(DataType:=pp

在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 & "\template\template.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 & "\workstreams\ws1.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 & "\workstreams\ws2.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视图的状态,如果它显示缩略图或正常的幻灯片视图

若要修复此问题,请在粘贴之前将ViewType设置为normal

PPAP.ActiveWindow.ViewType = ppViewNormal


PPAP代表PowerPoint应用程序对象。

非常感谢!DoEvents in WAY 1似乎正在工作,至少到目前为止:)ppt已经处于正常模式。但错误仍然发生在Excel 2016中。我使用的是Excel 2013,没有使用Excel 2016进行检查。也许是类似的东西使PowerPoint无法粘贴。你已经找到了如何修复它了吗?没有。这是一个剪贴板复制粘贴时间问题。多年来仍然存在。女士未提供任何决议。
PPAP.ActiveWindow.ViewType = 9