Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
错误462 VBA-Excel和;幻灯片演示文件_Vba_Excel - Fatal编程技术网

错误462 VBA-Excel和;幻灯片演示文件

错误462 VBA-Excel和;幻灯片演示文件,vba,excel,Vba,Excel,我正在尝试将某些展品从Excel自动复制到PPT模板,以适应大约500种不同的情况。不幸的是,我遇到了错误,它不一致地抛出错误462。我在网上查阅了几个小时,没有找到任何有用的资料。我理解一个常见的错误是延迟绑定;然而,我已经尽我所能地运用这一点。非常感谢你的帮助 Dim myBook As Workbook Set myBook = ThisWorkbook Dim pptName As String Dim DestinationPPT As String Dim myShape As O

我正在尝试将某些展品从Excel自动复制到PPT模板,以适应大约500种不同的情况。不幸的是,我遇到了错误,它不一致地抛出错误462。我在网上查阅了几个小时,没有找到任何有用的资料。我理解一个常见的错误是延迟绑定;然而,我已经尽我所能地运用这一点。非常感谢你的帮助

Dim myBook As Workbook
Set myBook = ThisWorkbook

Dim pptName As String
Dim DestinationPPT As String
Dim myShape As Object
Dim ppt As Object
Dim mySlide As Object

Dim pptA As Object
Set pptA = CreateObject("PowerPoint.Application")


DestinationPPT = myBook.path & "\template.pptx"

Application.ScreenUpdating = False
Application.DisplayAlerts = False

'Call Module1.mkdirectories(myBook.path)

Dim inputRange As Excel.Range
Dim c As Excel.Range
Dim worksheetCt As Integer
worksheetCt = 8
myBook.Worksheets("input").Activate

Set inputRange = Evaluate(myBook.Worksheets("input").Range("c4").Validation.Formula1)
For Each c In inputRange
    Range("c4").Value = c
    Calculate

    Set ppt = pptA.Presentations.Open(DestinationPPT)

    For worksheetCt = 8 To 39
        'On Error Resume Next
        myBook.Activate
        myBook.Worksheets(worksheetCt).Range("Print_Area").Copy
        DoEvents

        pptA.Activate
        'ppt.Activate

        Set mySlide = ppt.Slides(worksheetCt - 5)

        'Call Module1.UglyWait
        **mySlide.Shapes.PasteSpecial DataType:=2**
        'Call Module1.UglyWait

        **Set myShape = mySlide.Shapes(mySlide.Shapes.Count)**

粗体行是代码失败的地方

我发现,通过在一个单独的过程中复制和粘贴图表,我已经不再有问题了。我猜将幻灯片传递到另一个过程会神奇地使其有效,而将复制/粘贴放在一个循环中尝试多次似乎解决了粘贴问题

Public Sub PPPasteShape(mySlide As PowerPoint.Slide, pc As ChartObject)
Dim i As Integer
Dim worked As Boolean
i = 0
pc.Copy
worked = False
  
  Do While (i < 5 And worked = False)
    Debug.Print "Try: " & CStr(i)
    If i > 0 Then
      Application.Wait (Now + TimeValue("0:00:01"))
    End If
    worked = PPTryPasteShape(mySlide)
    i = i + 1
  Loop
End Sub

Public Function PPTryPasteShape(mySlide As PowerPoint.Slide) As Boolean

On Error GoTo err

mySlide.Shapes.Paste
PPTryPasteShape = True
Exit Function

err:
PPTryPasteShape = False
End Function

Public Sub PPPasteRange(mySlide As PowerPoint.Slide, rng As Range)
Dim i As Integer
Dim worked As Boolean
i = 0
rng.Copy
  
  Do While (i < 5 And worked = False)
    Debug.Print "Try: " & CStr(i)
    If i > 0 Then
      Application.Wait (Now + TimeValue("0:00:01"))
    End If
    worked = PPTryPasteRange(mySlide)
    i = i + 1
  Loop
End Sub


Public Function PPTryPasteRange(mySlide As PowerPoint.Slide) As Boolean

On Error GoTo err

mySlide.Shapes.Paste
PPTryPasteRange = True
Exit Function

err:
PPTryPasteRange = False
End Function
公共子PPPasteShape(mySlide作为PowerPoint.Slide,pc作为ChartObject)
作为整数的Dim i
Dim担任布尔函数
i=0
复印件
工作=错误
执行时(i<5且已工作=错误)
调试。打印“Try:”&CStr(i)
如果i>0,那么
Application.Wait(现在+时间值(“0:00:01”))
如果结束
工作=PPT形状(mySlide)
i=i+1
环
端接头
公共函数PPTryPasteShape(mySlide作为PowerPoint.Slide)作为布尔值
上错下错
mySlide.Shapes.Paste
PPTryPasteShape=True
退出功能
错误:
PPTryPasteShape=False
端函数
公共子PPPasteRange(mySlide作为PowerPoint.Slide,rng作为Range)
作为整数的Dim i
Dim担任布尔函数
i=0
收到
执行时(i<5且已工作=错误)
调试。打印“Try:”&CStr(i)
如果i>0,那么
Application.Wait(现在+时间值(“0:00:01”))
如果结束
工作=PpTryMasterRange(mySlide)
i=i+1
环
端接头
公共函数PPTryPasteRange(mySlide作为PowerPoint.Slide)作为布尔值
上错下错
mySlide.Shapes.Paste
PPTryPasteRange=True
退出功能
错误:
pptRypasterRange=False
端函数
可能会将其声明为

Dim myShape As Powerpoint.Shape
Dim ppt As Powerpoint.Presentation
Dim mySlide As Powerpoint.Slide

虽然提到Word而不是Powerpoint,但我敢打赌解决您的问题的方法是相同的。嘿,肯-谢谢您的回复。我认为,由于我将每个对象设置为对PowerPoint应用程序和PowerPoint deck的引用,因此这不是正确的解决方案。你还有别的想法吗?我试图将引用添加回应用程序,但没有成功。它告诉您需要在这些调用中引用Powerpoint应用程序。您的代码正在Excel中执行,Excel没有演示文稿或幻灯片。不要认为你做的事情是对的——如果你做了,你就不会有问题了。:-)我想我应该重新表述我的观点,我将powerpoint幻灯片和幻灯片设置为对象,但使用了powerpoint应用程序来处理这两个对象。例如,我说ppt=pptA.Presentations.Open。。。然后myslide=ppt.slides。。。在这两种情况下,对PowerPoint应用程序的调用都在那里。。。我误解了吗?谢谢你的帮助!!我试过了,但它出错了。还有其他建议吗@chrisneilsen