我继承了一些使用三个全局变量的代码

Global PPTApp As PowerPoint.Application
Global PPTPres As PowerPoint.Presentation
Global PPtSlides As PowerPoint.Slide


稍后在代码中,它通过以下方式使用它们

Sub PasteTablesPPT(TargetText As String, PPTRange As Range)

Dim TargetSlide As PowerPoint.Slide

PPTApp.Activate

For Each PPtSlides In PPTPres.Slides               'Error on colleagues PC
    With PPtSlides.Shapes.Title.TextFrame
        If .HasText Then
            If UCase(.TextRange.Text) = UCase(TargetText) Then
                TargetNum = CInt(PPtSlides.SlideIndex)
                Exit For
            End If
        End If
    End With
Next


在我的PC上,它可以按应有的方式工作,即它会激活打开的Powerpoint应用程序,然后循环浏览该演示文稿中的每个幻灯片。

但是,在我的同事PC上,我标记的线路出现了错误。具体的错误是Error 451,我认为这与PPtSlides无法识别为PPtSlides有关。同样在调试模式下,当我将鼠标悬停在PPtSlides上时,它说“ Nothing”。

我们在VBA工具中使用了相同的引用检查,是否有人可以阐明为什么它可以在我的PC上而不是在我的同事上运行?

编辑:
定义PPTPres的部分(在另一个子目录中,这只是该子目录的一部分)

On Error GoTo ErrHandler
    Set PPTApp = GetObject(class:="PowerPoint.Application")
    PPTApp.Visible = msoTrue
    Set PPTPres = PPTApp.Presentations("Testing File")
Exit Sub

最佳答案

在子PasteTablesPPT中,尝试将PPtSlides声明为PowerPoint.Slide。

dim PPtSlides as PowerPoint.Slide

10-08 17:09