首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误462 VBA - Excel和PPT之间的自动化

错误462 VBA - Excel和PPT之间的自动化
EN

Stack Overflow用户
提问于 2018-07-31 08:58:34
回答 2查看 290关注 0票数 0

我正在尝试自动将某些展品从Excel复制到PPT模板,以适应大约500种不同的情况。不幸的是,我遇到了错误,它抛出错误462不一致。我已经浏览了几个小时的在线资源,但没有找到任何有用的东西。我知道一个常见的错误是延迟绑定;然而,我已经尽可能地应用了这一点。非常感谢您的帮助。

代码语言:javascript
复制
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)**

粗体行是代码失败的地方。

EN

回答 2

Stack Overflow用户

发布于 2021-05-04 03:44:41

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

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2021-05-04 22:54:25

也许可以将它声明为

代码语言:javascript
复制
Dim myShape As Powerpoint.Shape
Dim ppt As Powerpoint.Presentation
Dim mySlide As Powerpoint.Slide
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51604109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档