引用PowerPoint演示文稿和幻灯片时出现错误451

3

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

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

在我的电脑上,这个程序可以正常工作,也就是它会启动PowerPoint应用程序,并循环遍历演示文稿中的每一张幻灯片。
然而,在我同事的电脑上,程序在我标记的那一行出现了错误。具体的错误是Error 451,我认为这与PPtSlides未被识别为PPtPres.Slides的一部分有关。在调试模式下,当我将鼠标悬停在PPtSlides上时,它显示为“Nothing”。
我们在VBA工具中检查了相同的引用,有人能解释一下为什么这个程序在我的电脑上可以工作,但在我同事的电脑上不行吗?
编辑: PPTPres被定义的部分(在另一个子程序中,这只是该子程序的一部分)。
On Error GoTo ErrHandler
    Set PPTApp = GetObject(class:="PowerPoint.Application")
    PPTApp.Visible = msoTrue
    Set PPTPres = PPTApp.Presentations("Testing File")
Exit Sub

你们在使用同一个PPT文件吗? - Nathan_Sav
1
如果您在黄色行中检查PPtSlides的值,则正常情况下它不会显示任何内容,因为该行尚未执行。但是,您能否添加定义PPTPres的部分? 它很可能来自那里。还有一点需要注意的是,为了遵守惯例,最好将PPtSlides更改为PPtSlide,因为它只是单个幻灯片而不是集合。 - R3uK
1
PowerPoint的版本相同吗? - John Coleman
错误似乎是基于集合的,所以我认为可能是PPT的.slides集合,但现在不确定 :) - Nathan_Sav
错误处理程序只是在用户没有打开名为“测试文件”的PowerPoint时创建一个PowerPoint。用户是我和其他4个同事,所以代码实际上从未通过错误处理程序。 - user3737057
显示剩余2条评论
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接