【问题标题】:Error 462 VBA - Automation between Excel & PPT错误 462 VBA - Excel 和 PPT 之间的自动化
【发布时间】:2021-05-04 22:54:25
【问题描述】:

我正在尝试自动将某些展品从 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)**

粗线是代码失败的地方..

【问题讨论】:

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

标签: vba excel


【解决方案1】:

我发现,通过在单独的过程中完成所有图表的复制和粘贴,我已经不再遇到问题了。我猜想将幻灯片传递给另一个程序会神奇地导致它有效,并且将复制/粘贴放在循环中多次尝试似乎解决了粘贴问题。

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

【讨论】:

    【解决方案2】:

    也许声明为

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

    【讨论】:

      猜你喜欢
      • 2021-04-07
      • 2020-03-18
      • 1970-01-01
      • 2017-04-06
      • 2019-03-29
      • 2014-07-18
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多